You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django迁移报错:日期格式无效,需为YYYY-MM-DD格式

问题分析与解决

核心问题

你给DateField设置的default='YYYY-MM-DD'是无效配置——Django会将这个字符串当作实际日期值解析,而YYYY-MM-DD并非合法日期格式,这就是报错的直接原因。

即使删除该字段,之前生成的迁移文件仍保留着错误的默认值逻辑,执行migrate时Django会读取旧迁移文件,因此报错持续出现。

解决步骤

1. 修复迁移文件(最直接方案)

  • 找到模型对应的迁移文件(位于migrations目录下,如0001_initial.py)
  • 打开文件定位到date_of_brith字段的配置代码,修正两处问题:
    • 字段名拼写错误:date_of_brith改为date_of_birth
    • 替换无效默认值:
      • 若不需要默认值,保留null=True即可,可额外添加blank=True允许表单提交空值
      • 若需要默认值,使用合法的日期对象,示例:
        from datetime import date
        date_of_birth = models.DateField(null=True, blank=True, default=date.today)
        

2. 清理迁移残留(删除字段后仍报错时)

  • 删除添加date_of_brith字段后生成的迁移文件
  • 执行python manage.py makemigrations重新生成正确的迁移文件
  • 最后执行python manage.py migrate

3. 极端情况:重置迁移(迁移历史混乱时)

仅建议在开发环境操作,生产环境需谨慎:

  • 删除migrations目录下除__init__.py外的所有文件
  • 执行python manage.py makemigrations重新生成初始迁移
  • 执行python manage.py migrate --fake-initial让Django标记初始迁移已完成

注意事项

  • DateField的默认值必须是合法date对象,或可被解析为日期的具体字符串(如'2024-01-01'),不能用占位符字符串
  • 修改模型后务必检查生成的迁移文件,确保配置符合预期

内容的提问来源于stack exchange,提问作者Popa Oliviu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 12:25:59