在 Django 中更新查询集而不是 For 循环

Update a Queryset in Django instead of For loop

我正在尝试更新查询集,我想计算字段顺序

class Temporal(model.Models):
   id = models.UUIDField(default=uuid.uuid4, primary_key=True)
   name=models.CharField(max_length=60)
   created_at = models.DateTimeField(auto_now_add=True)
   order = models.IntegerField(null=True, blank=True)

在我的应用程序中,重要的是 order_by created_at,然后将一个订单作为索引,每次创建一个新对象时都会分配值 cero,其余对象需要加 +1,但我想使用查询集而不是使用 for 循环:

items = Temporal.objects.all().order_by('-created_at')
for index, item enumerate(items):
   item.order=index + 1
   item.save()

假设数据库中有数千个项目,这会非常慢...提前致谢

根据 django 文档,您可以使用 bulk_update,因此请查看 link:https://docs.djangoproject.com/en/3.2/ref/models/querysets/#bulk-update

尝试如下操作:

items = Temporal.objects.all().order_by('-created_at')
for index, item enumerate(items):
   item.order=index + 1
Temporal.objects.bulk_update(items, ['order'])

就是这样。