我希望使用Django REST框架在“一起”创建多个模型对象,即在单个事务中进行。
目标是每个对象只在事务(成功)结束时可见。
我该怎么做?
我希望使用Django REST框架在“一起”创建多个模型对象,即在单个事务中进行。
目标是每个对象只在事务(成功)结束时可见。
我该怎么做?
使用django.db.transaction
中的atomic
作为你想要执行数据库操作的函数的装饰器:
如果obj_list
包含已填充(但未保存)的模型对象列表,则此方法将执行所有操作作为一个事务。
@atomic
def save_multiple_objects(obj_list):
for o in obj_list:
o.save()
如果您想在同一API请求的范围内保存多个对象,那么(例如),如果它们都是相同类型的,则可以将对象列表POST到API端点 - 请参见Django REST框架发布对象数组
Django 数据库事务
来实现这一点。请参考下面的代码。from django.db import transaction
with transaction.atomic():
model_instance = form.save(commit=False)
model_instance.creator = self.request.user
model_instance.img_field.field.upload_to = 'directory/'+model_instance.name+'/logo'
self.object = form.save()
这个例子是从我自己的回答中提取出来的,你可以在这篇SO文章中看到。这样,在调用save()
之前,您可以保存/编辑其他依赖项。