Django фильтр по полю "многие ко многим" не работает

Имеется модель Article и в ней есть поле many-to-many categories. Я хочу отфильтровать ее по этому полю, но это не работает так, как я ожидал. Например:

MyModel.objects.filter(categories__id__in = [0, 1, 2])

он получает модель с категориями 0 и 1, даже если у нее нет категории с id 2. Я пробовал что-то вроде этого:

MyModel.objects.filter(Q(categories__id = 0) & Q(categories__id = 1) & Q(categories__id = 2))

но он даже не работает. он даже не получает модель, если у него есть все эти категории

Кстати, я не хочу использовать более 1 метода фильтрации

Итак, есть ли какое-нибудь решение для меня?

Спасибо.

P.S: django И на Q не работает для многих - тот же вопрос, но автор так и не получил ответа.

Вы можете посчитать, совпадает ли он с тремя Category и таким образом получить только те элементы, где эти три совпадают:

from django.db.models import Count

MyModel.objects.filter(
    categories__id__in=[0, 1, 2]
).annotate(
    category_count=Count('categories')
).filter(category_count=3)
Вернуться на верх