使用Django批量保存数据

0 投票
2 回答
509 浏览
提问于 2025-04-15 17:44

我有一个对象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()))

撰写回答