Как отфильтровать набор запросов с несколькими значениями 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, это волшебным образом работает.

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