你可以利用
bulk_create
和
bulk_update
方法,您需要手动创建对象列表。
对你来说
ModelA
是父类和
ModelB
是个孩子。
意思是
模型A
可以与多个对象相关
属于
模型B
如果你有
request.data
在您的API端点中似乎是这样。
received_data = [
{
"name": "model_a_obj_1",
"children": [
{
"address" : "some_address"
},
{
"address" : "some_other_address"
}
]
}, {}, {}, ...
]
现在,第一步是创建两个列表,一个是子列表,一个是父对象列表。
model_a_obj_list = []
model_b_children_list = []
for obj in received_data:
children_list = []
for child in obj.children:
children_list.append(ModelB(**child))
model_b_children_list.append(children_list)
model_a_obj_list.append(ModelA(name=obj.name))
现在,首先创建父对象,即ModelA,然后循环ModelA的实际对象以指定
pk
到相应的ModelB对象
model_a_objs = ModelA.objects.bulk_create(model_a_obj_list)
model_b_obj_list = []
for i, a_obj in enumerate(model_a_objs):
model_b_obj_sub_list = model_b_children_list[i]
for b_obj in model_b_obj_sub_list:
b_obj.model_a = a_obj
model_b_obj_list.append(b_obj)
现在我们有了带有ModelA引用的ModelB对象。现在只需创建ModelB对象。
ModelB.objects.bulk_create(model_b_obj_list)
记住
批量创建
方法不使用
.save()
模型类的方法,所以
post_save
创建对象列表时必须计算逻辑
批量创建
这个解决方案将达到每种型号的DB 2次