如何更新模型中所有对象的参数 - Django

时间:2017-11-30 12:03:59

标签: python django django-models

我想更新数据库中所有对象的Django模型中的参数。每个对象的值都不同,我正在尝试确定是否可以将其作为批量更新,或者是否必须遍历每个项目并单独保存每个项目。

我正在使用的模型是Django auth用户模型的扩展:

from django.contrib.auth.models import User
from django.db import models

class Profile(models.Model):
    user = models.OneToOneField(User)
    position = models.PositiveIntegerField(null=False, default=0)

如果我得到如下所有对象:

queryset = User.objects.all()

然后循环浏览这些并更新position

for user in queryset:
    user.position = #SOME FUNCTION

我必须在user.save()循环中执行for吗?或者我可以更新每个项目,然后一次保存到数据库吗?

1 个答案:

答案 0 :(得分:1)

Django没有批量更新,但您可以做的是使用原子事务通过提交所有更新语句一次来提高性能。

from django.db import transaction

with transaction.atomic():
    for user in queryset:
        user.position = #SOME FUNCTION
        user.save()

仍会有len(queryset)个插页,但它们会被归为一个单独的交易。