在Django中更新Queryset而不是For循环



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

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,但我想使用queryset而不是使用for循环:

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

假设数据库中有数千个条目,这将非常慢…提前感谢

根据django文档,你可以使用bulk_update,所以检查链接: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'])

相关内容

  • 没有找到相关文章

最新更新