Django auto_now=True 不更新

python 复制代码
create_time = models.DateTimeField(db_column="CreateTime", auto_now_add=True)
update_time = models.DateTimeField(db_column="UpdateTime", auto_now=True)

现象:

update_time 的auto_now设置为True,更新了表格里的某个属性的值,却发现update_time和create_time始终一致,保持最开始的创建时间。

原因:

因为更新时用的filter的update。

filter的update 通常用于批量更新数据,直接调用sql语句,不通过model层,所以导致了update_time不更新。

python 复制代码
models.AbilityScore.objects.filter(employee_id=employee_id, 
                                            ability_id=ability_id).update(upcoming_value=upcoming_value)

解决:

先通过filter判断出有该项记录后通过get获取该项记录也即model类的一个实例对象,通过该实例的属性赋值方式来更新,即可使update_time更新,最好记得调用save()。

python 复制代码
        if models.AbilityScore.objects.filter(employee_id=employee_id, ability_id=ability_id):
            # models.AbilityScore.objects.filter(employee_id=employee_id,
            #                                    ability_id=ability_id).update(upcoming_value=upcoming_value)
            employee_ability = models.AbilityScore.objects.get(employee_id=employee_id, ability_id=ability_id)
            employee_ability.upcoming_value = upcoming_value
            employee_ability.save()

参考:django model的update时auto_now不被更新的原因 - 代码先锋网

相关推荐
凯瑟琳.奥古斯特3 小时前
力扣1235:加权区间调度最优解
java·python·算法·leetcode·职场和发展
郑洁文3 小时前
基于Python的网络入侵检测系统
网络·python·php
AIMath~3 小时前
python中的uv命令揭秘
开发语言·python·uv
弹简特4 小时前
【零基础学Python】06-Python模块和包、异常处理、文件常用操作
开发语言·python
念恒123064 小时前
Python 面向对象编程核心:对象、实例化、封装与变量作用域
开发语言·python
薛定谔的悦4 小时前
光伏-储能-负荷联合预测:给 EMS 装上“预知能力“
java·数据库·人工智能·python·储能
ggabb5 小时前
形制与意蕴的殊途:中英诗歌的优劣差异探析
sqlite
Metaphor6925 小时前
使用 Python 在 Excel 中查找并高亮显示
python·信息可视化·excel
旦莫5 小时前
AI测试Agent的两种架构路径:谁做主控?
人工智能·python·架构·自动化·ai测试
搬石头的马农5 小时前
从零配置Claude自动修Bug:6步打造全自动开发流程
java·人工智能·python·bug·ai编程