如果过滤到最后,如何更新多个对象并从0递增到第一个

时间:2014-01-19 08:28:40

标签: python django django-models django-views

如何按顺序更新模型的所有现有对象。

例如,拥有自定义对象1,2,3,4,5的对象。

删除customid 3,然后我需要重新评估其余部分。

increment = 0
for obj in allobj:
    Obj.objects.filter(id=obj.id).update(customid=increment) 
    increment = increment + 1

然后获取自定义1,2,3,4

1 个答案:

答案 0 :(得分:1)

我假设customid不是主键(永远不会像这样更新主键)。要调整对象,您可以使用:

from django.db.models import F

Obj.objects.filter(customid__gt=3).update(customid=F('customid') - 1)

查询customid列大于3的所有对象,并从该列中减去1。如果您的customid序列之前是顺序的,则此更新将恢复序列。

执行一个更新查询,服务器端。

请参阅Updating multiple objects at once