我知道您可以使用以下方法更新与过滤器匹配的所有 Django 记录:
myQuery = myModel.objects.filter(fieldA = 1, FieldB = 2)
myQuery.update(fieldA = 5, FieldB = 6)
但是如果我想迭代查询结果并只更新某些值,我该怎么做? 我尝试过:
myQuery = myModel.objects.filter(fieldA = 1, FieldB = 2)
for item in range(myQuery.count())
if (myQuery[item].fieldC) == 10:
myQuery[item].update(fieldC = 100)
这将返回AttributeError:'myModel'对象没有属性'update'
最佳答案
正如您自己发现的那样,Model
对象没有 .update(..)
方法。您可以.save(..)
[Django-doc]对象,并使用 update_fields=…
parameter [Django-doc] 指定要更新的字段:
myQuery = myModel.objects.filter(fieldA=1, FieldB=2)
for item in myQuery:
if item.fieldC == 10:
item.fieldC = 100
item.<b>save(update_fields=['fieldC'])</b>
话虽如此,上述方法非常效率低下。由于对于 n 个对象,总共最多会进行 n+1 次查询。
您可以简单地将条件移动到此处的过滤器部分:
myModel.objects.filter(fieldA=1, FieldB=2<b>, fieldC=10</b>).update(fieldC=100)
关于django - 如何在 for 循环中更新 Django 查询对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59570256/