更新queryset属性值而不会丢失该属性的顺序

时间:2015-06-16 09:34:00

标签: python django django-models

class Foo(models.Model):
    value = models.IntegerField()

    class Meta:
        ordering = ('value',)

考虑这个查询集:

[<Foo pk=1 value: 0>, <Foo pk=3 value: 2>, <Foo pk=2 value: 5>]

更新查询集的好方法是:

[<Foo pk=1 value: 0>, <Foo pk=3 value: 1>, <Foo pk=2 value: 2>]

所以基本上我希望所有实例都维护它们的顺序,但更新整个查询集,以便每个实例使用其最低可能值来保持层次结构,这基本上可以归结为:

>>> range(0, qs.count())
[0, 1, 2]

我想我可以使用上面的范围,然后在我的查询集中找到Max,通过调用我的范围上的pop()更新它,直到我的范围为空,但这似乎效率低下

1 个答案:

答案 0 :(得分:1)

希望以下帮助:

for i, record in enumerate(qs):
    record.value = i