带有增量整数的django批量更新字段

时间:2019-03-15 17:52:32

标签: django django-models

是否可以用递增的整数(不是id)批量更新查询集的一个字段?像queryset.update(serial_no=i),其中i=1,2,3...

Django版本= 1.11

1 个答案:

答案 0 :(得分:0)

我不知道这是否会真正起作用,因为我没有尝试过,但是您应该尝试一下。

from django.db.models import F
from django.db.models.functions import RowNumber
from django.db.models.expressions import Window

queryset.annotate(
    row_number=Window(
        expression=RowNumber()
        order_by=F('ORDER_FIELD').asc(), # This needs to be set explicitly
    )
).update(serial_no=F('row_number'))

这应该做的是选择行号,第一个记录将为1,第二个记录将为2,依此类推。然后,更新应通过F表达式使用该值来更新serial_no。我唯一担心的是Django在尝试执行Window注释和更新时会失败。

请告诉我它是否有效。