Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
django同时提交2个事务_Django_Transactions - Fatal编程技术网

django同时提交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()

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

您应该能够使用


有什么问题?是否要在一个查询中修改两个对象?是。第一次保存时,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()