如何在 Django REST 框架中使用事务?
Posted
技术标签:
【中文标题】如何在 Django REST 框架中使用事务?【英文标题】:How to use transactions with Django REST framework? 【发布时间】:2017-02-22 12:07:10 【问题描述】:我希望使用 Django REST 框架“一起”创建多个模型对象——即在单个事务中。
目标是每个对象仅在事务(成功)结束时可见。
我该怎么做?
【问题讨论】:
【参考方案1】:将django.db.transaction
中的atomic
用作围绕执行您所追求的数据库操作的函数的装饰器:
如果obj_list
包含已填充(但未保存)模型对象的列表,这将作为一个事务的一部分执行所有操作。
@atomic
def save_multiple_objects(obj_list):
for o in obj_list:
o.save()
如果您想将多个对象保存为同一个 API 请求的一部分,那么(例如)如果它们都是同一类型,那么您可以将对象列表发布到 API 端点 - 请参阅Django REST framework post array of objects
【讨论】:
【参考方案2】:您可以使用django db transactions
实现此目的。参考下面的代码
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 post 的回答。这样,before calling save() you can save/edit other dependencies
【讨论】:
以上是关于如何在 Django REST 框架中使用事务?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 django rest 框架中为枚举字段创建序列化程序
使用 django rest 框架,如何为现有父对象添加新的嵌套子对象
ModelSerializer 在 Django REST 框架中非常慢