迁移中的Django日期时间默认值

时间:2016-05-31 08:35:56

标签: python mysql django django-migrations

我已经阅读了有关此问题的一些问题,this问题为我的案例提供了正确答案:

我在已有的模型中添加了created_time字段,因此mysql表中没有属于该模型的日期。

class Configs(models.Model):
    ...
    creation_date = models.DateTimeField(auto_now_add=True, blank=True)
    ...

我使用python manage.py makemigrations

应用迁移

我收到了这个错误:

  

您正在尝试添加一个不可为空的字段' creation_date'至   没有默认的集合;我们不能这样做(数据库需要   填充现有行的东西)。请选择修复:

我尝试了很多选择:

creation_date = models.DateTimeField(auto_now_add=True)

这个给出了同样的错误。

如果设置中的USE_TZ设置为False,如何实现此迁移? 顺便说一下,这是Django 1.9.4 makemigrations脚本中的一个错误吗?

1 个答案:

答案 0 :(得分:11)

auto_now_add设置创建实例时的当前日期时间,这在迁移期间从未发生过,因此您尝试将NULL保留为不可为空的字段。

解决方案是向模型中添加默认日期makemigrations,然后再次从模型makemigrations移除默认参数,最后移除migrate。您可以在字段中添加null=True,向填充字段的迁移添加RunPythonRunSQL,然后从字段中删除null=true。< / p>

最后,您可以合并两个迁移文件(或简单地自己编写)以结束类似:

operations = [
    migrations.AddField(
        model_name='configs',
        name='creation_date',
        field=models.DateTimeField(auto_now_add=True, null=True, blank=True),
    ),
   migrations.RunPython(populate_dates),
   migrations.AlterField(
        model_name='configs',
        name='creation_date',
        field=models.DateTimeField(auto_now_add=True, blank=True),
    ),
]

我刚刚写了它,所以我希望它没有很多错别字