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

Ben*_* RR 10 python django rest django-models django-rest-framework

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

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

我怎样才能做到这一点?

Jon*_*dge 8

使用atomicfromdjango.db.transaction作为围绕执行您所追求的数据库操作的函数的装饰器:

如果obj_list包含已填充(但未保存)的模型对象列表,这将作为一个事务的一部分执行所有操作。

@atomic def save_multiple_objects(obj_list): for o in obj_list: o.save()

如果您想将多个对象保存为同一个 API 请求的一部分,那么(例如)如果它们都是相同的类型,那么您可以将对象列表发布到 API 端点 - 请参阅Django REST framework post array of对象


cut*_*eth 5

您可以使用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()
Run Code Online (Sandbox Code Playgroud)

这个例子取自我自己对这个SO post的回答。这边走,before calling save() you can save/edit other dependencies