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不被更新的原因 - 代码先锋网

相关推荐
春日见29 分钟前
5分钟入门强化学习之动态规划算法与实现
大数据·人工智能·python·算法·机器学习·计算机视觉
DeniuHe1 小时前
sklearn 中所有交叉验证数据集划分方式完整总结
人工智能·python·sklearn
DeniuHe1 小时前
sklearn中不同交叉验证方法的场景适配
人工智能·python·sklearn
隐于花海,等待花开2 小时前
16.Python 常用第三方库概览 深度解析
python
我材不敲代码2 小时前
Python 函数核心:位置参数与关键字参数详解
java·前端·python
风落无尘2 小时前
第十一章《对齐与安全》 完整学习资料
python·安全·机器学习
Kratzdisteln2 小时前
【无标题】
前端·python
hakesashou2 小时前
python文件操作需要导入模块吗
python
wuxinyan1232 小时前
工业级大模型学习之路029:解决双智能体调用数据库报错问题
数据库·人工智能·python·学习·智能体
SunnyDays10112 小时前
Python操作Excel批注:从基础添加到高级自定义的完整指南
开发语言·python·excel