У меня есть поле поиска и два дополнительных параметра поиска (категория и платформа) рядом с результатами на странице поиска.
мой набор запросов выглядит следующим образом в виде списка:
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
параметров?