django同时提交2个事务
我有一个具有唯一位置(队列)的模型。现在,当我想在队列中上下移动一个对象时,我必须更改队列中的2交换位置。 然而,当我试图保存它们时(我想这是因为所有内容都会自动提交),惟一约束就会被违反 如何在一个事务中保存这两个更改 例如:django同时提交2个事务,django,transactions,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_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()
您应该能够使用
有什么问题?是否要在一个查询中修改两个对象?是。第一次保存时,skill.position不是唯一的,因为数据库中的其他技能尚未更新。(维萨也一样)所以我需要把它们保存在同一个操作上。我刚才给出了一个关于方法的答案,你也可以签入文档。你正在寻找延迟约束检查。我不相信Django为此提供了API。您必须查看数据库后端的文档以了解详细信息。您好,谢谢您的帮助。我不知道我可以用atmoic来做这个。不过,我可以在这一刻进行测试,当我今晚进行测试时,我会将其标记为正确答案。这是正确答案。无需使用pre_save或原始SQL进行复杂的操作
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()