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

Django后台编辑报错:'datetime.date'对象无utcoffset属性

问题原因

你的lastDate字段是DateTimeField,但生成默认值的return_date_time函数返回的是**date对象**,而Django在处理DateTimeField(尤其是开启时区支持时)需要的是带时区信息的datetime对象。编辑时Django会调用utcoffset()方法处理时区转换,date对象没有这个方法,因此触发AttributeError。

解决方案

1. 修正默认值函数

把返回date对象的逻辑改成返回带时区的datetime对象:

from django.utils import timezone
import datetime

def return_date_time():
    # timezone.now() 返回带当前时区的datetime对象,叠加10天偏移量
    return timezone.now() + datetime.timedelta(days=10)

注意:不要用datetime.datetime.now(),它返回的是不带时区的datetime,在USE_TZ = True的配置下会引发其他兼容性问题。

2. 修复已存在的错误数据

之前创建的数据里,lastDate可能已经存成了date类型,需要批量修正:
打开Django Shell(运行python manage.py shell),执行以下代码:

from django.utils import timezone
import datetime
from your_app_name.models import Job  # 替换成你的实际app名称

for job in Job.objects.all():
    # 判断字段是否为date类型而非datetime类型
    if isinstance(job.lastDate, datetime.date) and not isinstance(job.lastDate, datetime.datetime):
        # 将date转为带时区的datetime(取当天凌晨时间)
        job.lastDate = timezone.make_aware(datetime.datetime.combine(job.lastDate, datetime.time.min))
        job.save()

3. 验证修改

完成以上两步后,重新进入admin页面编辑数据,就不会再触发utcoffset相关错误。makemigrations提示无变更属于正常情况,因为我们只是修改了默认值函数的逻辑,没有改变模型字段的定义。

内容的提问来源于stack exchange,提问作者Jeong hoo SHIN

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 09:51:56