如何在Django REST框架中使用事务?

11

我希望使用Django REST框架在“一起”创建多个模型对象,即在单个事务中进行。

目标是每个对象只在事务(成功)结束时可见。

我该怎么做?

2个回答

10

使用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框架发布对象数组


7
您可以使用 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()之前,您可以保存/编辑其他依赖项。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接