gpt4 book ai didi

python - Django 空字段回退

转载 作者:太空狗 更新时间:2023-10-30 02:35:41 26 4
gpt4 key购买 nike

我有一个保存用户地址的模型。该模型必须具有 first_namelast_name 字段,因为人们希望将地址设置为收件人(如他的公司等)。我想要实现的是:

  • 如果地址中的 first_name/last_name 字段已填写 - 仅返回该字段
  • 如果地址中的 first_name/last_name 字段为空 - 从指向正确的 django.auth.models 的外键中获取相应的字段数据。用户
  • 我希望将其视为将出现在字段查找中的普通 Django 字段
  • 我不想创建一个方法,因为它是一个重构,并且 Address.first_name/last_name 在应用程序的各个地方使用(也以模型形式)等),所以我需要尽可能顺利,否则,我将不得不在很多地方进行修补。

最佳答案

这里有两个选项。第一种是创建一个动态查找它的方法,但使用 property 装饰器,以便其他代码仍然可以使用直接属性访问。

class MyModel(models.Model):
_first_name = models.CharField(max_length=100, db_column='first_name')

@property
def first_name(self):
return self._first_name or self.user.first_name

@first_name.setter
def first_name(self, value):
self._first_name = value

这将始终引用 first_name 的最新值,即使相关用户已更改。您可以像获取属性一样获取/设置属性:myinstance.first_name = 'daniel'

另一种选择是覆盖模型的 save() 方法,以便它在您保存时进行查找:

def save(self, *args, **kwargs):
if not self.first_name:
self.first_name = self.user.first_name
# now call the default save() method
super(MyModel, self).save(*args, **kwargs)

这样您就不必更改数据库,但它只会在保存时刷新 - 因此如果相关的用户对象已更改但此对象未更改,它将引用旧的用户值。

关于python - Django 空字段回退,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1342679/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com