gpt4 book ai didi

Django 查询集更新方法从查询集中删除对象

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

这不是预期的行为:

items = Item.objects.filter(sent=False)

items.count() # 3

items.update(sent=True)

items.count() # 0

如何在查询集中更新对象而不丢失它们?

最佳答案

每当您运行 .count() 时,您都在执行另一个查询。

所以这是预期的行为 - 在您进行更新之前,有 3 个对象带有 sent=False,之后没有。

如果你想保留你的结果,你需要将它们保存在一个变量中。

items_count = items.count()

如果您没有处理太多项目,一个潜在的解决方案是列出查询集。

items = list(Item.objects.filter(send=False)
len(items) # 3
Item.objects.filter(send=False).update(send=True)
len(items) # 3

这当然意味着您不再有权访问查询集方法(这就是我为什么必须使用 len 而不是 .count() 的原因。这确实意味着虽然您甚至可以在更新后使用这些模型(但您需要记住,如果您这样做,您正在处理过时的实例 - send 仍将设置为 False )

请记住,查询集不是模型列表。它是查询的表示,您可以对其进行迭代以获得结果。

关于Django 查询集更新方法从查询集中删除对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42915922/

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