2016-01-03 48 views
0


我有一个模型的Django应用程序。我需要根据升序ID更新模型对象。像这样的东西。如何通过命令更新

MyModel.objects.filter(my_field='value').order_by("id").update(another_field='anotheValue') 

我可以保证更新会按顺序按顺序发生吗?

回答

0

由于您已经订购了使用ID的查询集,因此应该按顺序更新。

从文档,

使用update()还可以防止竞争条件,其中一些可能 变化在数据库中的时间装载 物体之间的周期短,调用save()。

所以我认为排序可能并不重要。但是是完全肯定的是,你可以遍历项目并更新它们:

rows = MyModel.objects.filter(my_field='value').order_by("id") 
for row in rows: 
    row.another_field = 'another value' 
    row.save() 

然而,update方法将生成一个SQL查询,那里的迭代会产生许多。所以这可能是一个性能问题。