使用Django批量保存数据
我有一个对象A,它和对象B之间有多对多的关系。请问有没有办法一次性保存对象A及其对应的B集合?也就是说,不想一个一个地保存B对象,然后再把它们加到A里。
for b in b_objects :
A.b_objs.add(b)
A.save()
谢谢
2 个回答
0
我觉得不是这样的。多对多关系是通过一个中间表来实现的,这个表里包含了(id, a_id, b_id)这样的数据。因此,A必须先存在(可以参考“示例API用法”),而且每个B在中间表的记录创建之前必须有一个id
。我查看了django.db.models.fields.related
的源代码,虽然create_many_related_manager
里有一个叫_add_items()
的方法,但它似乎假设所有要添加的B项已经有了id
字段,也就是说它们必须在此之前就已经保存过。
我找不到任何可以实现A.add(bunch_of_Bs_that_havent_been_saved_yet)
的方式。上面提到的例子确实展示了如何一次性add()
多个B,但这些B在调用add()
之前都已经保存过了。抱歉。
0
你可以把你的模型导出为json格式(可以参考这个链接:http://www.djangosnippets.org/snippets/125/):
import sys, os
sys.path.append('/Path/To/Django/Projects/')
os.environ['DJANGO_SETTINGS_MODULE'] = 'myproject.settings'
from django.core.serializers import serialize
from myproject.myapp import models
model_names = [] # a list of the names of the models you want to export
for model_name in model_names:
cls = getattr(models, model_name)
filename = model_name.lower() + ".json"
file = open(filename, "w")
file.write(serialize("json", cls.objects.all()))