Django迁移多次检测到相同的更改

时间:2015-06-19 17:21:58

标签: django django-models django-migrations

我有一个这样的模型:

MyModel(models.Model):
    ...
    date_start = models.DateTimeField(
        auto_now=True,
        editable=True
    )

    date_end = models.DateTimeField(
        default=datetime.now() + relativedelta(months=3)
    )

...

之前我修改了date_end字段,并且我进行了迁移,它运行正常,但现在它仍然检测到该更改为新的迁移。任何的想法?提前谢谢。

1 个答案:

答案 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
)

请注意,我们将函数对象而不是结果作为默认参数传递。