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

Django获取当前日期时间遇两类报错,求解决方案

解决Django模型字段的两类错误问题

我来帮你逐个排查并解决这两个Django模型的错误:


第一类错误:ValidationError(格式无效)

问题根源

你这里踩了两个关键坑:

  1. 字段类型不匹配:用IntegerField来存储日期和时间完全不对,Django提供了专门的DateField(存日期)和TimeField(存时间)来处理这类数据,IntegerField只能存整数,根本无法识别日期/时间对象或字符串,这就是触发格式错误的核心原因。
  2. default参数写法错误:你直接写了datetime.now().date()和datetime.now().time(),这会导致这个默认值在模型第一次加载的时候就被固定死,而不是每次创建新对象时生成最新的日期/时间。正确的姿势是传入可调用对象(比如函数名,不带括号),让Django在创建对象时动态调用它。

修正后的代码

from datetime import datetime
from django.db import models

class Images(models.Model):
    created_date = models.DateField(default=datetime.now)
    created_time = models.TimeField(default=datetime.now)
    road_name = models.CharField(max_length=100, default='NULL')

划重点:datetime.now后面一定不要加括号!这样Django每次创建新的Images实例时,都会调用这个函数获取当前的日期/时间。如果你的项目需要时区支持,记得换成django.utils.timezone.now。


第二类错误:SystemCheckError(参数互斥)

问题根源

Django的字段规则写得很清楚:auto_now、auto_now_add和default这三个参数是互斥的,不能同时出现在同一个字段上。

  • auto_now_add=True:会自动在对象第一次创建时设置为当前时间,而且后续无法手动修改;
  • auto_now=True:会自动在每次保存对象时更新为当前时间;
    这两个参数本身已经实现了自动赋值的逻辑,完全不需要再搭配default参数。

修正后的代码

根据你的实际需求来选:
如果created_date是记录对象创建时间(只设置一次),created_time是记录最后修改时间(每次保存都更新):

from django.db import models
from django.utils import timezone

class Images(models.Model):
    created_date = models.DateTimeField(auto_now_add=True)
    created_time = models.TimeField(auto_now=True)

如果created_time也是记录对象创建时的时间,不需要自动更新:

class Images(models.Model):
    created_date = models.DateTimeField(auto_now_add=True)
    created_time = models.TimeField(auto_now_add=True)

额外提示:如果之后需要手动设置这些字段的值,可以去掉auto_now/auto_now_add,只保留default=timezone.now(不带括号),这样既有默认值,也支持手动赋值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 09:42:34