Dar*_*one 7 python django django-queryset
如果我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}]>
Run Code Online (Sandbox Code Playgroud)
是否可以使用从内部的每个哈希data创建ModelB对象QuerySet?
我意识到我可以迭代并解压缩QuerySet并像这样做:
for q in data:
ModelB.objects.create(date=q['date'], total=q['total'], average=q['average'])
Run Code Online (Sandbox Code Playgroud)
但是有更优雅的方式吗?当它们几乎处于bulk_create格式时,迭代和创建似乎是多余的.
这比你的调用更有效,因为它使用bulk_create,它只调用一个SQL批量创建操作,而不是每个对象创建一个; 而且,它更优雅:
ModelB.objects.bulk_create([ ModelB(**q) for q in data ])
Run Code Online (Sandbox Code Playgroud)
至于它是如何工作的,双星号将字典(或类字典对象)解包为Python函数的关键字参数.