这篇文章给大家分享的是有关django模型的更新时auto_now不被更新怎么办的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
gmt_create自动添加auto_now_add; gmt_modify自动更新auto_now
class CommonInfo (models.Model): “““基类,提供共同信息,不会创建真实的table"““ class 元: #,才能声明自己为抽象基类 abstract 才能=,真的 #,才能下面表示先根据更新时间gmt_modify降序排序,如果更新时间相同,再根据创建时间gmt_create降序排序 ordering 才能=,(& # 39;-gmt_modify& # 39;,, & # 39; -gmt_create& # 39;】 gmt_create =, models.DateTimeField(& # 39;创建时间,自动创建& # 39;,,auto_now_add=True,,零=True, help_text=& # 39;创建时间& # 39;) #,使用可保存以达到自动更新的效果,使用更新不会自动更新,因此需要携带上这个字段 gmt_modify =, models.DateTimeField(& # 39;更新时间,自动更新& # 39;,,auto_now=True,,零=True, help_text=& # 39;更新时间& # 39;)
django的orm关于更新数据库的方法有更新和保存两种方法。
使用保存时会自动更新
obj =, User.objects.get (id=1) obj.name=& # 39; xxx # 39; obj.save ()
save()时确实会自动更新当前时间
这是因为这个操作它经过了模型层
使用更新不会自动更新,因此需要在使用滤波器的更新更新的时候同时赋值时间为datetime.datetime.now ()
如果用django滤波器的更新(通常为批量更新数据时)则是因为直接调用sql语句不通过模型层
User.objects.filter (id=1) .update(用户名=& # 39;xxx # 39;)
引用><强>补充知识:强> <强> django的auto_now=True没有自动更新强>
auto_now=True自动更新,有一个条件,就是要通过django的模型层。
如创建或是保存方法。
如果是过滤之后更新方法,则直接调用的是sql,不会通过模型层,
<强>所以不会自动更新此时间。官方解释:强>
你考虑一个bug,其他人可能会考虑一个特性,例如usingupdate_fieldsto绕过withauto_now更新字段。事实上,我是不会# 39;t expectauto_nowfields inupdate_fields更新如果不是礼物。
引用><强>解决办法:强>
强制改成保存()或是更新时,带上时间。
如下:
,, status_item =, DeployStatus.objects.get (name=status_name) DeployImage.objects.filter才能(name=order_name) .update ( ,,,deploy_status=status_item, ,,,change_date=datetime.now ()) #,才能上面的操作,才会更新DeployImage表里的change_date (add_now=True)的时间, #才能,或是如下调用保存()方法 #,才能deploy_item =, DeployImage.objects.get (name=order_name) #,才能deploy_item.deploy_status =status_item #,才能deploy_item.save ()感谢各位的阅读!关于“django模型的更新时auto_now不被更新怎么办”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
django模型的更新时auto_now不被更新怎么办