如何为要从模型的现有对象中获取的字段设置默认值?
我尝试了这些但没有用:
1)
class ModelA(models.Model):
fieldA = models.CharField(default=self.get_previous())
def get_previous(self):
return ModelA.objects.all()[0].fieldA
NameError: name 'self' is not defined
2)
class ModelA(models.Model):
fieldA = models.CharField(default=ModelA.get_previous())
@staticmethod
def get_previous():
return ModelA.objects.all()[0].fieldA
NameError: name 'ModelA' is not defined
3)
class ModelA(models.Model):
fieldA = models.CharField(default=get_previous())
def get_previous():
return ModelA.objects.all()[0].fieldA
NameError: global name 'get_previous' is not defined
4)
def get_previous():
return ModelA.objects.all()[0].fieldA
class ModelA(models.Model):
fieldA = models.CharField(default=get_previous())
NameError: global name 'ModelA' is not defined
很明显为什么 3) 和 4) 不起作用。我可以想象为什么 1) 不起作用 - 看起来类的属性不能引用实例的(即自我)。我可以想象为什么 2) 不起作用 - 显然在解释器进入整个课堂之前没有对 ModelA 的引用。
那么我应该如何处理呢?
原文由 grucha 发布,翻译遵循 CC BY-SA 4.0 许可协议
在您的示例中,您需要删除调用运算符
()
。目前该语句在第一个读取解析周期立即执行。通过指定符号名称,Django 类接收一个函数指针,它会在实际需要默认值时执行。
示例变为:
如果您要为很多字段执行此操作,请考虑重写
save
函数,这样您只需从数据库中获取以前的对象一次。