Мои модели выглядят так:
class Category(models.Model):
name = models.CharField(_('name'), max_length=50)
class Product(models.Model):
name = models.CharField(_('product name'), max_length=40)
category = models.ManyToManyField(Category)
Я пытаюсь создать фильтр-запрос, в котором я могу выбрать 1 или несколько категорий и вернуть товары, связанные со всеми выбранными категориями.
Пример
Продукт_1 - принадлежит к категории_1, категории_2
Продукт_2 - Принадлежит к категории_1, категории_2 и категории_3
При фильтрации по категориям_1 и категории_2 оба продукта должны возвращатьсязапрос.При фильтрации по всем 3 категориям следует возвращать только Product_2, поскольку это единственный продукт, относящийся ко всем выбранным категориям.
Фильтрация будет динамической, поэтому число категорий для фильтрации может быть бесконечным.
Как мне это сделать?Я попытался сделать
Product.objects.filter(category__in=[1,2,3])
Но это дает мне и product_1, и product_2, так как они соответствуют ЛЮБОЙ из категорий.
Я попытался создать фильтр Q
Product.objects.filter(Q(category__id=1), Q(category__id=2))
Но это не возвращает никакого продукта.
Как будет работать такой запрос?