Django散装更新字段,并增加整数



是否有可能用增量整数(不是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会突破尝试进行窗口注释和更新。

请让我知道它是否有效。

最新更新