是否有可能用增量整数(不是ID)更新QuerySet的一个字段?像 queryset.update(serial_no=i)
i=1,2,3...
django版本= 1.11
我不知道这是否真的可以正常工作,因为我没有尝试过,但是您应该尝试一下。
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会突破尝试进行窗口注释和更新。
请让我知道它是否有效。