Множественные фильтры в django

Я хочу отфильтровать фильмы, которые соответствуют только выбранным жанрам, например:

def get_queryset(self):
    queryset = Movie.objects.all()
    if 'genres' in self.request.GET:
        queryset = queryset.filter(genre__in=self.request.GET.getlist('genres'))
    return queryset

Этот фильтр показывает фильмы, которые подходят хотя бы под один фильтр, но я хочу показать фильмы, которые подходят под все выбранные жанры, например "комедия, ужасы, фантастика", и все выбранные жанры должны быть в жанрах фильма. Как мне это сделать?

возможно, вы ищете это?

genre = ['horror', 'comdey'] (dummy list of genre)
queryset = queryset.objects.filter(genre__in=genre)

Если вы ищете быстрое решение, я думаю, что ответ на этот вопрос уже был дан здесь: Django filter queryset __in for *every* item in list

Короче говоря, если у вас небольшой набор жанров (примерно до 5), то вы можете добавить .filter() для каждого жанра:

Movie.objects.filter(genre='genre1').filter(genre='genre2')....

Ссылка: https://docs.djangoproject.com/en/dev/topics/db/queries/#spanning-multi-valued-relationships

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