Набор запросов теряется при изменении страницы в Django
Я создал систему поиска для моих объектов под названием Property и она фильтрует и ищет по моим объектам хорошо на первой странице, но когда я меняю пагинацию или упорядочивание или меняю страницу все фильтры пропадают и она отправляет все объекты в шаблон есть ли способ исправить это? вот мой код
views.py
class SearchView(ListView):
model = Property
template_name = 'property/properties-list.html'
context_object_name = 'properties'
ordering = '-pub_date'
paginate_by = 8
def get_context_data(self, *args, **kwargs):
context = super(SearchView, self).get_context_data(*args, **kwargs)
"""somthing"""
return context
def get_paginate_by(self, queryset):
if self.request.GET.get("paginate_by") == "":
return self.paginate_by
return self.request.GET.get("paginate_by", self.paginate_by)
def get_ordering(self):
ordering = super(SearchView, self).get_ordering()
if self.request.GET.get('sort_by') == "Name":
return ('-title')
elif self.request.GET.get('sort_by') == "Price":
return ('-price')
elif self.request.GET.get('sort_by') == "Date":
return ('-pub_date')
else:
return self.ordering
def get_queryset(self):
location = self.request.GET.get('location')
category = self.request.GET.get('category')
look_for = self.request.GET.get('look_for')
if location or category or look_for:
if look_for == '' and category == '':
queryset = Property.objects.filter(Q(city__icontains = location))
elif look_for == '':
queryset = Property.objects.filter(Q(city__icontains = location) & Q(category__slug = category))
elif category == '':
queryset = Property.objects.filter(Q(city__icontains = location) & Q(property_status = look_for))
else:
queryset = Property.objects.filter(Q(city__icontains = location) & Q(category__slug = category) & Q(property_status = look_for))
else:
queryset = Property.objects.all()
return queryset
Очевидно, что я новичок в Django, если у вас есть какие-либо рекомендации по улучшению моего кода, я буду рад их услышать.
<a href="?page={{ page_obj.next_page_number }}" aria-label="Next">
Помните, что HTTP не имеет статического характера. Он не отслеживает автоматически параметры сортировки или фильтрации. Здесь вы включаете page
только в параметры запроса, поэтому это единственный вариант, который становится известен, когда пользователь нажимает кнопку "следующий". Одним из решений для поддержания порядка фильтрации или сортировки является включение соответствующих параметров запроса в href
всех тегов <a>
.