django模型的更新时auto_now不被更新怎么办

  介绍

这篇文章给大家分享的是有关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不被更新怎么办