【问题标题】:Django - trigger auto_now field changeDjango - 触发 auto_now 字段更改
【发布时间】:2014-06-02 18:51:18
【问题描述】:

我想知道如何重新保存对象只是为了更新auto_now 字段。

众所周知,我想到了这段代码

obj = MyModel.objects.get(id=someid)
obj.save()

但是如果我有很多对象要更新怎么办?或者更好地说,更新对象的auto_now 字段的最佳方法是什么

【问题讨论】:

    标签: django django-models


    【解决方案1】:

    我最终在每个对象上使用save() 来更新auto_now 字段。

    正如 Daniel 所说,update() 实际上不会更新 auto_now 字段,因为它会直接进行 SQL 更新,而 auto_now 字段是在 Python 代码中设置的。

    所以我做到了:

    obj = MyModel.objects.get(id=someid)
    obj.save()
    

    对于多个对象:

    objs = MyModel.objects.all()
    for obj in objs:
       obj.save()
    

    【讨论】:

    • n+1 个查询不好!
    【解决方案2】:

    如何使用update() 并将id 值设置为自身来触发auto_now 字段更改:

    from django.db.models import F
    
    MyModel.objects.filter(something=something).update(id=F('id'))
    

    【讨论】:

    • 到现在都没用过F,终于到了。谢谢人:)
    • @doniyor 再次感谢您收集的另一个有趣的问题 :)
    • 永远是我的荣幸! ;)
    • 这实际上不会更新 auto_now 字段,因为update 会直接更新 SQL,而 auto_now 是在 Python 代码中设置的。
    • @doniyor 好的,然后最好不接受答案,添加您自己的答案并接受它。这将帮助其他人了解目前最好的解决方案。谢谢。
    猜你喜欢
    • 2021-12-23
    • 2013-10-22
    • 2016-11-02
    • 1970-01-01
    • 2010-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-20
    相关资源
    最近更新 更多