通过在 Django 中克隆只有一列更改的查询集,在一个操作中插入多行
Posted
技术标签:
【中文标题】通过在 Django 中克隆只有一列更改的查询集,在一个操作中插入多行【英文标题】:Insert multiple rows in one operation by cloning a queryset with only one column change in Django 【发布时间】:2014-03-23 21:38:39 【问题描述】:我看到了以下链接: How do I clone a Django model instance object and save it to the database?
但是这个只做 1 个对象克隆。如果我想克隆多个克隆的对象怎么办。 例如。像这样:
foo_objects = Foo.objects.filter(col1=value1)
foo_objects.pk = None
foo_objects.col2=value2
foo_objects.save()
我知道我可以使用批量插入。如果有,请建议其他方法。
【问题讨论】:
【参考方案1】:查询集上没有更新方法可以更新关系字段。您必须使用bulk_create()
来创建/保存多个对象。但在此之前遍历查询集以适当地设置属性。
类似
foo_objects = Foo.objects.filter(col1=value1)
for f in foo_objects:
f.pk = None
f.col2=value2
f.save() #either do this or save with bulk create as
Foo.objects.bulk_create(foo_objects)
【讨论】:
这也是我想出来的。我不想创建完整的对象。我终于使用了 bulk_create。【参考方案2】:如果你不想使用批量创建,你可以像这样自己控制事务提交
from django.db import transaction
with transaction.commit_on_success():
for foo_object in foo_objects:
foo_object.pk = None
foo_objects.col2=value2
foo_objects.save()
【讨论】:
以上是关于通过在 Django 中克隆只有一列更改的查询集,在一个操作中插入多行的主要内容,如果未能解决你的问题,请参考以下文章