有效地从字典对象更新模型

时间:2018-01-02 23:02:51

标签: django

我有一个简单的模型:

     class A(models.Model):
        status=models.CharField()

我以这种方式列出了字典项目:

     data=[
         {'id':1, 'status':'moved'},
         {'id':2, 'status':'sized'}
         ]

id和status键与模型字段相关。目前,我正在通过循环数据来更新它们,这没关系。但是前几天网络服务发了一个很长的清单,它让我思考,如果他们不发送数天和发送的话,它可能是一个很大的清单。由于我无法控制传递给我的数据,最有效的更新方式是什么?

目前:

       for i in range(len(data)):
           record=A.objects.get(pk=data[i]['id'])
           record.status=data[i]['status']
           record.save()

我正在寻找类似.filter()。update(....)的东西,但其状态可以对每条记录采用不同的方式。

任何人?

1 个答案:

答案 0 :(得分:1)

以下是使用atomic transaction

的代码的改进版本
from django.db import transaction

@transaction.atomic
def update(data):
    for d in range(data):
        record = A.objects.get(pk=d['id'])
        record.status = d['status']
        record.save()

如果过程花费的时间过长,请使用像Celery这样的任务队列,它将在后台完成工作或在任何给定时间安排它,例如在没有人使用您的应用程序的午夜时