Django从QuerySet批量创建对象

问题描述 投票:4回答:1

如果我有一个从以下命令创建的QuerySet

data = ModelA.objects.values('date').annotate(total=Sum('amount'), average=Avg('amount'))
# <QuerySet [{'date': datetime.datetime(2016, 7, 15, 0, 0, tzinfo=<UTC>), 'total': 19982.0, 'average': 333.03333333333336}, {'date': datetime.datetime(2016, 7, 15, 0, 30, tzinfo=<UTC>), 'total': 18389.0, 'average': 306.48333333333335}]>

是否有可能使用dataModelB内的每个哈希创建QuerySetobjects?

我意识到我可以迭代并解压缩QuerySet并像这样做:

   for q in data:
        ModelB.objects.create(date=q['date'], total=q['total'], average=q['average'])

但是有更优雅的方式吗?当它们几乎处于bulk_create格式时,迭代和创建似乎是多余的。

python django django-queryset
1个回答
5
投票

这比你的调用更有效,因为它使用bulk_create,它只调用一个SQL批量创建操作,而不是每个对象创建一个;而且,它更优雅:

ModelB.objects.bulk_create([ ModelB(**q) for q in data ])

至于它是如何工作的,双星号将字典(或类字典对象)解包为Python函数的关键字参数。

© www.soinside.com 2019 - 2024. All rights reserved.