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