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

如何让Django模型的DateTimeField不保存时区信息?

解决Django DateTimeField时区不匹配问题

嘿,这个时区不兼容的坑我之前在项目里也踩过,其实调整模型字段的一个小参数就能搞定!

问题根源

你的last_click字段默认继承了Django全局设置里的USE_TZ=True,所以保存的是带时区偏移的datetime(offset-aware),而datetime.now()生成的是无时区的datetime(offset-naive),两者类型不同自然没法直接比较或运算。

核心解决方案:给字段显式关闭时区支持

只需要在DateTimeField中添加use_tz=False参数,就能让这个字段存储无时区的时间,和datetime.now()的格式完全匹配。修改后的模型代码如下:

class IPLog(models.Model):
    last_click = models.DateTimeField(use_tz=False)

如果你的需求是每次保存实例时自动更新last_click为当前时间,可以结合auto_now参数一起用,省得手动赋值:

class IPLog(models.Model):
    last_click = models.DateTimeField(auto_now=True, use_tz=False)

这样每次调用save()时,last_click会自动设置为当前无时区的时间,完美适配后续和datetime.now()的比较操作。

别忘了同步数据库迁移

修改字段后,必须生成新的迁移文件并应用,确保数据库里的字段类型同步调整:

python manage.py makemigrations
python manage.py migrate

额外说明

如果你想全局关闭时区支持,也可以把settings.py里的USE_TZ改成False,但这样所有DateTimeField都会变成无时区存储,可能影响其他业务逻辑,所以更推荐针对单个字段设置use_tz=False的精准调整方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:12:17