我尝试了这样的代码:
mymodels = MyModel.objects.filter(status=1)
mymodels.update(status=4)
print(mymodels)
结果是一个空列表
我知道我可以使用for循环来替换更新。
但它会进行大量的更新查询。
在批量更新后,有没有继续操作mymodel?
答案 0 :(得分:3)
请记住Django's QuerySets are lazy:
QuerySets很懒 - 创建QuerySet的行为不涉及任何数据库活动。您可以整天将过滤器堆叠在一起,在评估QuerySet之前,Django实际上不会运行查询
但是the update()
method function is actually applied immediately:
立即应用update()方法,对更新的QuerySet的唯一限制是它只能更新模型主表中的列,而不能更新相关模型上的列。
因此,在您的代码中 - 在您的update
之后应用filter
来电,实际上它正在预先应用,因此您的对象status
正在filter
之前被更改1}}(懒惰地)应用,意味着没有匹配的记录,结果为空。
答案 1 :(得分:2)
mymodels = MyModel.objects.filter(status=1)
objs = [obj for obj in mymodels] # save the objects you are about to update
mymodels.update(status=4)
print(objs)
应该有用。
解释为什么Timmy O'Mahony给出了。