Как отфильтровать набор запросов с несколькими значениями m2m?
Я пытаюсь фильтровать Seo модель. Я хочу получить объекты, которые имеют зависимость от бренда и зависимость от модели. Код
class SeoListView(generics.ListAPIView):
serializer_class = SeoListSerializer
def get_queryset(self) -> QuerySet:
queryset = Seo.objects.all()
dependencies = self.request.query_params.get('dependencies')
if dependencies is not None:
dependencies = [str(dep).strip() for dep in dependencies.split(',')]
print(dependencies)
# for dep in dependencies:
# query.add(Q(dependencies__dependency__exact=dep), Q.AND)
query = reduce(lambda q, dep: q & Q(dependencies__dependency__exact=dep), dependencies, Q())
queryset = queryset.filter(query)
return queryset
class Dependency(models.Model):
dependency = models.SlugField(
'Зависимость', unique=True,
help_text='Перечислите зависимости через нижнее подчеркивание. Пример: brand_model'
)
def __str__(self) -> str:
return f'Зависимость {self.dependency}'
class Meta:
verbose_name = 'Зависимость'
verbose_name_plural = 'Зависимости'
class Seo(models.Model):
statuses = (
(1, 'Дефолтная'),
(2, 'Дополнительная')
)
_delimiter = SEOService().delimiter
_help_text = (
f'Если вы ввели Купить {_delimiter}, а зависимость - car,'
f' то после сохранения получится Купить car машину. '
f'Все {_delimiter} заменяются на соотв. им зависимости.'
)
dependencies = models.ManyToManyField(
Dependency,
verbose_name='Зависимости',
blank=True,
help_text='Оставьте пустым, если это дефолтный шаблон.'
)
h1 = models.CharField(
'Заголовок(h1)', max_length=200,
help_text=_help_text
)
title = models.CharField(
'Заголовок(title)', max_length=200,
help_text=_help_text
)
description = models.CharField(
'Описание', max_length=200,
help_text=_help_text
)
keywords = models.TextField(
'Ключевые слова',
help_text=_help_text
)
status = models.IntegerField('Статус', choices=statuses, blank=True, help_text='Не трогать руками', null=True)
def __str__(self) -> str:
return f'Настройка сео'
class Meta:
verbose_name = 'Настройка'
verbose_name_plural = 'Настройки'
Я УВЕРЕН, что у меня есть объекты, которые имеют зависимость от модели и бренда в базе данных. По какой-то причине это просто не работает, забавно, что когда я пытаюсь фильтровать его OR, это волшебным образом работает.