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)