ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python – 迁移中的Django datetime默认值

2019-07-22 11:55:09  阅读:328  来源: 互联网

标签: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应用迁移

我收到这个错误:

You are trying to add a non-nullable field ‘creation_date’ to
collections without a default; we can’t do that (the database needs
something to populate existing rows). Please select a fix:

我尝试了很多选择:

creation_date = models.DateTimeField(auto_now_add=True)

这个给出了同样的错误.

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

解决方法:

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

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

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

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),
    ),
]

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

标签:python,mysql,django,django-migrations
来源: https://codeday.me/bug/20190722/1502790.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有