如何按订单更新

时间:2016-01-03 16:58:03

标签: django django-models sql-update sql-order-by


我有一个带模型的django应用程序。我需要根据升序id更新模型对象。这样的事情。

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

我可以确保按照订单按顺序更新订单吗?

1 个答案:

答案 0 :(得分: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查询,其中迭代将生成许多。所以这可能是性能问题。