为什么我会出现要求YYYY-MM-DD时间格式的Django ValidationError错误?
问题根因
你遇到的报错是因为给Django的DateTimeField字段传入了空字符串,而非None值。
你模型里定义的Post.timeStamp和BlogComment.timestamp字段虽然同时设置了blank=True(表单层面允许空输入)和null=True(数据库层面允许存储NULL值),但Django的字段校验逻辑只会把None识别为合法的空值,空字符串""会被当做普通字符串做日期格式校验,不符合YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ]的格式要求,因此抛出ValidationError。
修复方案
- 检查所有保存
Post、BlogComment数据的逻辑(包括视图函数、表单处理、后台操作逻辑):如果获取到的时间参数为空字符串,先将字段值赋值为None再调用save()方法保存。 - 若需求是创建数据时自动填充当前时间,可直接给字段增加
auto_now_add=True参数,无需手动赋值即可避免空值问题,修改后的字段示例:
# Post类中的时间字段 timeStamp = models.DateTimeField(blank=True, null=True, auto_now_add=True) # BlogComment类中的时间字段 timestamp = models.DateTimeField(blank=True, null=True, auto_now_add=True)
说明:auto_now_add会在数据首次创建时自动写入当前时间,后续不会自动更新;如果需要每次修改数据都更新时间,可替换为auto_now=True。
- 临时验证方法:在调用
save()方法前打印两个时间字段的赋值,确认是否存在空字符串,替换为None后即可验证问题是否解决。
内容的提问来源于stack exchange,提问作者Arabindra Dhami
相关产品推荐
相关产品推荐

