有一个任务模型:
class Task(models.Model):
index = models.PositiveSmallIntegerField('Нумерация')
chapter = models.ForeignKey(..., verbose_name='Раздел')
...
class Meta:
unique_together = ('chapter', 'index')
verbose_name_plural = 'Задачи'
verbose_name = 'Задача'
每个任务都链接到一个部分。任务在一个部分内被唯一编号。
我需要实现更改任务顺序的功能,在 UI 中它看起来像通过单击向上/向下箭头来拖动任务。服务器收到这样的json:
{
*task_id1*: *order_delta1*,
*task_id2*: *order_delta2*,
}
task_id
- 任务 id
order_delta
- 任务编号更改的增量
然后我写了这个函数:
def save_order_changes(changes: list[ChangeEntry]):
changed_ids = (change.task_id for change in changes)
# Создаем условия
statements = (
When(pk=change.task_id, then=F('index') + change.delta)
for change in changes
)
# Создаем условия
Task.objects.filter(pk__in=changed_ids).update(
index=Case(*statements)
)
但由于unique_together
我收到错误:
django.db.utils.IntegrityError: UNIQUE constraint failed: tasks_task.chapter_id, tasks_task.index
在我看来,在一个请求的框架内,检查不应该落空,因为最终形式中的值应该在唯一性方面是固定的?
有什么解决方法吗?是否可以暂时禁用一个请求的唯一性检查?