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

Django模型DateField设默认值迁移报日期格式错误如何解决

报错原因

你在模型中为DateField设置默认值的写法存在本质错误:
default=2022-2-27、default=2022-6-27这两行代码中,没有加引号的2022-2-27会被Python识别为整数减法表达式,计算后得到的是整数结果(前者为1993,后者为1989),完全不是合法的日期类型值。Django执行迁移、校验字段默认值时,会尝试将传入的值解析为日期格式,非日期类型的错误值无法通过YYYY-MM-DD格式校验,最终抛出你看到的ValidationError。

修复方案

选择以下任意一种方式修改模型字段定义即可:

  • 方案1(类型安全,官方推荐):导入Python内置的date对象构造默认日期
    先在models.py文件顶部添加导入语句:
    from datetime import date
    
    再修改两个日期字段的default参数:
    start_date = models.DateField(default=date(2022, 2, 27))
    end_date = models.DateField(default=date(2022, 6, 27))
    
    这种写法直接传入日期类型对象,不存在字符串格式解析问题,后续调用isocalendar()等日期方法也不会出现类型错误。
  • 方案2:传入符合格式要求的字符串作为默认值
    直接将日期值包裹为严格符合YYYY-MM-DD格式的字符串(月、日为个位数时需要补前导零),修改字段为:
    start_date = models.DateField(default="2022-02-27")
    end_date = models.DateField(default="2022-06-27")
    

修改完成后,重新执行迁移命令即可正常完成数据库同步:

python manage.py makemigrations
python manage.py migrate

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 09:27:13