Django的auto_now=True没有自动更新

时间:2021-10-30 03:28:53

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()