Django 迁移多次检测到相同的更改
Django migrations detect the same change many times
我有这样一个模型:
MyModel(models.Model):
...
date_start = models.DateTimeField(
auto_now=True,
editable=True
)
date_end = models.DateTimeField(
default=datetime.now() + relativedelta(months=3)
)
...
我之前修改了 date_end
字段,并进行了迁移,它工作正常,但现在它仍在检测该更改作为新迁移。任何的想法?提前致谢。
问题是您在定义的默认参数中调用 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
)
注意这里我们传递的是函数对象,而不是结果,作为默认参数。
我有这样一个模型:
MyModel(models.Model):
...
date_start = models.DateTimeField(
auto_now=True,
editable=True
)
date_end = models.DateTimeField(
default=datetime.now() + relativedelta(months=3)
)
...
我之前修改了 date_end
字段,并进行了迁移,它工作正常,但现在它仍在检测该更改作为新迁移。任何的想法?提前致谢。
问题是您在定义的默认参数中调用 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
)
注意这里我们传递的是函数对象,而不是结果,作为默认参数。