Запрос модели для фильтрации, в которой поле ManyToManyField соответствует определенному набору

У меня есть две модели:

class Item(models.Model):
    name = models.CharField()
    # etc

class MergedItems(models.Model):
    items = models.ManytoManyField(Item)
    # etc

Я хочу, чтобы для каждого MergedItem требовался уникальный набор Item. Когда пользователь пытается создать новый MergedItem, он передает массив идентификаторов Item. Я пытаюсь проверить этот ввод и выдать ошибку, если MergedItem с таким определенным набором Item уже существует, но у меня возникают трудности с логикой запроса/определения этого.

Например:

  1. User creates MergedItem with Item [1, 2] - OK
  2. User creates MergedItem with Item [3, 4] - OK
  3. User creates MergedItem with Item [1, 2, 3] - OK, [1, 2] already exists but the addition of 3 makes it a unique set
  4. User creates MergedItem with Item [1, 2] - ERROR, [1, 2] already exists

Все ресурсы, которые я нашел, были сосредоточены на использовании чего-то вроде filter(items__id_in=[1, 2]), но это делает запрос OR для идентификаторов элементов. Мне нужен запрос AND для них, и я не смог найти ничего подобного.

Я уверен, что существуют решения для перебора, но это будет работать на публичной конечной точке к большой базе данных, поэтому эффективность запросов также является ключевым фактором.

Заранее спасибо!

Вернуться на верх