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

Django模型无法将Python datetime写入MySQL带时区Timestamp字段求助

解决Django中DateTimeField赋值后数据库不更新的问题

我之前踩过几乎一模一样的坑,给你几个针对性的排查和解决思路:

  • 先确认最容易忽略的点:有没有调用save()?
    Django模型实例的属性修改只是在内存层面,必须显式调用listing.save()才能把变化同步到数据库。如果只做了赋值操作却没调用save,数据库自然不会有任何更新。

  • 检查字段名是否匹配!
    你模型里定义的字段是listing_modify_date,但代码里赋值用的是listing.modify_date——这明显是字段名写错了!Django只会把模型中定义的字段属性同步到数据库,你现在赋值的是一个模型不存在的modify_date属性,完全不会影响到数据库里的listing_modify_date字段。把赋值语句改成listing.listing_modify_date = datetime.now()再试试。

  • 排查模型save方法或信号的干扰
    如果你重写了模型的save()方法,或者注册了pre_save/post_save信号,可能在这些逻辑里覆盖了listing_modify_date的取值,导致你手动赋值的内容被冲掉。可以暂时注释掉自定义的save方法或信号,测试赋值是否能正常同步到数据库。

  • 针对时区的适配(针对PostgreSQL场景)
    你提到用pgAdmin执行SQL能成功,而Django赋值不行,如果你实际用的是PostgreSQL(而非描述里的MySQL),那可能是时区问题:datetime.now()返回的是不带时区的naive datetime对象,而PostgreSQL的timestamp with timezone字段需要带时区的datetime。可以改用Django自带的timezone.now()(记得先从django.utils import timezone),生成带时区的时间对象后再赋值。

  • 检查事务状态
    如果你的代码运行在事务块中,且事务没有提交,数据库也不会显示更新结果。可以确认代码是否在事务上下文里,或者手动调用transaction.commit()(从django.db import transaction)来提交事务。

你可以先优先检查字段名和save方法这两个点,大概率能解决问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:11:52