gpt4 book ai didi

django - 在 Django 模型中使用 update() 时如何跟踪更改

转载 作者:行者123 更新时间:2023-12-05 04:13:21 25 4
gpt4 key购买 nike

每当字段发生更改时,我都会尝试跟踪更改。

每当我使用 .save() 方法时,我都可以在 Django 管理历史记录中看到更改,但是每当我使用 .update() 方法时,它都不会记录我在对象中所做的任何更改。

我想使用 update() 因为它可以同时更改多个字段。它使代码更简洁、更高效(一个查询,一行...)

现在我正在使用这个:

u = Userlist.objects.filter(username=user['username']).update(**user)

我可以看到所有的变化

u = Userlist.objects.get(username=user['username'])
u.lastname=lastname
u.save()

我也在使用 django-simple-history 来查看 changes.setup。

最佳答案

来自docs :

Finally, realize that update() does an update at the SQL level and, thus, does not call any save() methods on your models, nor does it emit the pre_save or post_save signals (which are a consequence of calling Model.save())

update() 在数据库级别工作,因此当通过 .update(...) 应用更新时,Django 管理员无法跟踪更改。

如果您仍想跟踪更新的变化,您可以使用:

for user in Userlist.objects.filter(age__gt=40):
user.lastname = 'new name'
user.save()

然而,如果唯一的好处是通过管理历史跟踪更改,则这样做的成本更高,并且不建议这样做。

关于django - 在 Django 模型中使用 update() 时如何跟踪更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37951683/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com