Django执行migrate时报DateTimeField空值格式错误如何解决
问题根因
你此前执行makemigrations生成的home.0004_alter_contactme_timestamp迁移文件中,已经固化了你当时输入的空字符串默认值,即便后续你修改了models.py中的字段配置,这份有错误的迁移文件依然会在执行migrate时生效,所以会持续抛出时间格式不匹配的报错。
另外你当前recommend模型的__str__方法也存在逻辑错误:你调用了self.recommend,但你的模型中没有命名为recommend的字段,后续运行会触发属性不存在异常,建议替换为你实际存在的comment字段。
修复步骤
- 第一步:删除错误迁移文件
进入home应用的migrations目录,删除0004_alter_contactme_timestamp.py文件。如果该目录下还有版本号大于0004的迁移文件,本地开发环境可一并删除;如果是生产环境已经应用过的迁移,不要直接删除,需单独处理已入库的脏数据。 - 第二步:确认字段配置
可根据业务需求保留null和blank配置,参考配置如下:from django.utils.timezone import now # ...其余代码保持不变 timestamp = models.DateTimeField(default=now, null=True, blank=True) # 修复__str__方法的字段引用错误 def __str__(self): return self.comment[0:20] + "..." + "by" + self.user.username - 第三步:重新生成迁移文件
执行命令:python manage.py makemigrations
此时你已经配置了default=now,不会再弹出要求输入默认值的提示。 - 第四步:执行迁移
执行命令:python manage.py migrate
即可正常完成迁移操作。
如果是本地开发场景,上述操作执行后还是报错,可以直接删除项目根目录下的sqlite数据库文件,再重新执行一次迁移命令即可。
内容的提问来源于stack exchange,提问作者Labhroop singh
相关产品推荐
相关产品推荐

