我有一个这样的模型:
MyModel(models.Model):
...
date_start = models.DateTimeField(
auto_now=True,
editable=True
)
date_end = models.DateTimeField(
default=datetime.now() + relativedelta(months=3)
)
...
之前我修改了date_end
字段,并且我进行了迁移,它运行正常,但现在它仍然检测到该更改为新的迁移。任何的想法?提前谢谢。
答案 0 :(得分:0)
问题是您在定义的默认参数中调用 datetime.now()
。这意味着每次启动Django时默认值都会更改,因此系统认为您需要新的迁移。
您应该将该计算包装到lambda函数中,该函数将根据需要调用:
date_end = models.DateTimeField(
default=lambda: datetime.now() + relativedelta(months=3)
)
修改强>
如果lambda导致问题,您可以将代码移动到单独的函数中,并将其作为默认值传递:
def default_end():
return datetime.now() + relativedelta(months=3)
...
date_end = models.DateTimeField(
default=default_end
)
请注意,我们将函数对象而不是结果作为默认参数传递。