django фильтр по нескольким параметрам GET - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть поле поиска и два дополнительных параметра поиска (категория и платформа) рядом с результатами на странице поиска.

мой набор запросов выглядит следующим образом в виде списка:

def get_queryset(self):
    query = self.request.GET.get('q')
    category = self.request.GET.get('category')
    platform = self.request.GET.get('platform')

    text_query = (
        Q(name__icontains=query) |
        Q(category__name__icontains=query) |
        Q(tags__name__icontains=query)
    )

    object_list = Results.objects.all()

    if query:
        object_list = object_list.filter(
            text_query
        )

    if category:
        object_list = object_list.filter(Q(category__name=category))

    if platform:
        if platform == "windows":
            object_list = object_list.select_related('versions').latest().filter(windows=True)
        elif platform == "linux":
            object_list = object_list.select_related('versions').latest().filter(linux=True)
        elif platform == "mac":
            object_list = object_list.select_related('versions').latest().filter(mac=True)

    return object_list

Я знаю, что последняя часть может быть одной строкой с exec, но это не работает, потому что вы не можете отфильтровать результат фильтра (object_list).

Каков наилучший способ фильтр на основе нескольких GET параметров?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...