在 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'])
就是这样。
我正在尝试更新查询集,我想计算字段顺序
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'])
就是这样。