django 同时提交 2 个事务

django commit 2 transactions at the same time

我有一个具有独特位置(队列)的模型。现在,当我想在队列中向上或向下移动一个对象时,我必须更改队列中的 2 个交换位置。 但是,当我尝试保存它们时(我想这是因为所有内容都会自动提交),就会违反唯一约束。

如何在一个事务中保存两个更改?

示例:

skill_1 = Skill.object.get(position=3)
skill_2 = Skill.object.get(position=4)
skill_1.position = 4
skill_2.position = 3
skill_1.save()
skill_2.save()

您应该能够使用 transaction.atomic

显式控制交易
from django.db import transaction

def viewfunc(request):

    with transaction.atomic():
        skill_1 = Skill.object.get(position=3)
        skill_2 = Skill.object.get(position=4)
        skill_1.position = 4
        skill_2.position = 3
        skill_1.save()
        skill_2.save()