Django的auto_now=True没有自动更新

Posted aguncn

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django的auto_now=True没有自动更新相关的知识,希望对你有一定的参考价值。

auto_now=True自动更新,有一个条件,就是要通过django的model层。

如create或是save方法。

如果是filter之后update方法,则直接调用的是sql,不会通过model层,

所以不会自动更新此时间。官方解释:

What you consider a bug, others may consider a feature, e.g. usingupdate_fieldsto bypass updating fields withauto_now. In fact, I wouldn‘t expectauto_nowfields to be updated if not present inupdate_fields.

 

解决办法:

强制改成save()或是update时,带上时间。

如下:

    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)的时间,
    # 或是如下调用save()方法
    # deploy_item = DeployImage.objects.get(name=order_name)
    # deploy_item.deploy_status = status_item
    # deploy_item.save()

 

以上是关于Django的auto_now=True没有自动更新的主要内容,如果未能解决你的问题,请参考以下文章

Django在admin模块中显示auto_now_add=True或auto_now=True的时间类型列

python Django:如何使用auto_now = True手动设置/更新DateTimeField字段

Django auto_now 行为

auto_now

django model:auto_now_add 和 auto_now

Django auto_now 与 auto_now_add