我试图使用方法装饰器创建一个动态属性,我遇到的问题是如果用户没有保存他/她自己的字段,我想使用这个字段。例如:
class Person(models.Model):
name = models.CharField(max_length=100, null=True, blank=True)
def __str__(self):
return self.name
@property
def name(self):
return self.name if self.name else "John"
基本上,如果我在名称字段中找不到任何内容,我想返回“John”。但是,这样做时,Django 会提示,因为 self.name 正在查看名称函数而不是实际属性。
调用 Python 对象时超出最大递归深度
有没有一种方法可以引用不动产或者可能有其他方法来实现这一点?
请您参考如下方法:
一个简单的方法是重命名您的访问器方法/属性:
class Person(models.Model):
name = models.CharField(max_length=100, null=True, blank=True)
def __str__(self):
return self.name
def get_name(self):
return self.name if self.name else "John"
然后当你有一个实例时:
person.get_name()
