我的模型created_at = models.DateTimeField( auto_now_add = True )
中有此字段
当我尝试进行迁移时,我收到一个错误:
You are trying to add the field 'created_at' with 'auto_now_add=True' to user wi
thout a default; the database needs something to populate existing rows.
1) Provide a one-off default now (will be set on all existing rows)
2) Quit, and let me add a default in models.py
我试着设置默认值,但是它说default
和auto_now_add
是互斥的。当然我可以只使用默认值而不使用auto_now_add
,但是我想知道为什么会弹出这个错误。我错过了什么吗?
5条答案
按热度按时间6ljaweal1#
您已经有一些行没有
created_at
值。但是当您添加以下字段并运行迁移时它期望现有行具有
created_at
值。因此,它在迁移时向您发出警告。要解决此问题,您可以选择第一个选项
Provide a one-off default now (will be set on all existing rows)
。选择第一个选项时,您需要的是值。在此处,您可以输入timezone.now()
。它将使用当前时间戳填充现有行。wtzytmuj2#
删除应用程序中的迁移文件,您可以在没有错误出现时进行迁移过程,它是由于以前创建的时间对象的原因而出现的。
lymgl2op3#
如果您使用的是sqlite数据库,则可以省略它,然后重新创建它,或者您可以将null=True作为DateTimeFeild()的参数,我建议您使用我之前使用的第二个参数
uxhixvfz4#
这是因为auto_now_add = True使得django决定模型的每个示例都应该有一个值而不是null。
njthzxwz5#
您可以创建两个迁移,