django多个模型保存单个提交

The*_*rer 13 django django-models

在我看来,我在多个模型中保存数据:

def myview(request):
    #do some processing
    model1.save()
    model2.save()
Run Code Online (Sandbox Code Playgroud)

如何确保存在回滚model1.save()以防model2.save()出现错误.或者只有在两个模型都成功保存后才能提交?

换句话说,"如果save()都成功,则只保存model1和model2"

Lei*_*all 29

使用原子事务:

原子性是数据库事务的定义属性.atomic允许我们创建一个代码块,在该代码块中保证数据库的原子性.如果成功完成了代码块,则会将更改提交到数据库.如果存在异常,则回滚更改.

例子:

from django.db import transaction

with transaction.atomic():
    model1.save()
    model2.save()
Run Code Online (Sandbox Code Playgroud)

from django.db import transaction

try:
    with transaction.atomic():
        model1.save()
        model2.save()
except IntegrityError:
    handle_exception()
Run Code Online (Sandbox Code Playgroud)

  • 啊!完美!! 这正是我需要的.谢谢 (2认同)