是否可以用递增的整数(不是id)批量更新查询集的一个字段?像queryset.update(serial_no=i)
,其中i=1,2,3...
Django版本= 1.11
答案 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注释和更新时会失败。
请告诉我它是否有效。