django同时提交2笔交易

时间:2015-07-15 21:29:20

标签: django transactions

我有一个具有唯一位置(队列)的模型。现在当我想在队列中向上或向下移动一个对象时,我必须改变队列中的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()

1 个答案:

答案 0 :(得分:2)

您应该能够使用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()