Ответ Dr. Bacon не совсем понял, но сделал вот так. Если кому надо, у меня идет определение класса от ListView и определение метода get_queryset. Данный пример не работает сам по себе, но показывает идею
def get_queryset(self):
if not self.request.GET:
return Posts.objects.all()#если нет параметров, просто возвращаем все посты
keyword = self.request.GET.get('key')#получаем ключевое слово
author= self.request.GET.get('author')#если параметра нет, get() вернет None что равняется False
name = self.request.GET.get('name')#если параметра нет, get() вернет None что равняется False
text = self.request.GET.get('text')#если параметра нет, get() вернет None что равняется False
filters = Q()#создаем первый объект Q, что бы складывать с ним другие
if author:
filters |= Q(name__icontains=keyword )
if name:
filters |= Q(name__icontains=keyword )
if text:
filters |= Q(name__icontains=keyword )
return Posts.objects.filter(filters)