如何在django中批量更新后修改模型?

时间:2013-05-21 11:14:33

标签: python django django-models

我尝试了这样的代码:

mymodels = MyModel.objects.filter(status=1)
mymodels.update(status=4)
print(mymodels)

结果是一个空列表

我知道我可以使用for循环来替换更新。

但它会进行大量的更新查询。

在批量更新后,有没有继续操作mymodel?

2 个答案:

答案 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给出了。