Пагинация с упорядочиванием и другими переменными get
В ListView, основанном на классе, во время рендеринга я хочу динамически изменять количество элементов, отображаемых на странице, и порядок сортировки этих элементов.
Я ссылался на этот вопрос и ответ skoval00 работает для меня, когда я изменяю упорядочивание и меняю страницы. Но как только я изменяю количество элементов на странице, мой порядок теряется.
Например: мой общий вид ссылается на http://127.0.0.1:8000/marketplace/
.
Если я установлю пагинацию на 10 элементов на страницу.
Урл меняется на http://127.0.0.1:8000/marketplace/?paginate_by=10
Но теперь, если я тоже изменю свой порядок, я ожидаю что-то вроде
http://127.0.0.1:8000/marketplace/?paginate_by=10&ordering=end_date
но я получаю
http://127.0.0.1:8000/marketplace/?ordering=end_date
И пагинация изменится на значение по умолчанию. То же самое происходит и наоборот. Если я сначала делаю заказ, а затем меняю пагинацию, то после изменения пагинации я теряю заказ.
Как сохранить первый аргумент при добавлении второго?
Вот соответствующий класс в файле views.py
class CatalogueListView(ListView):
model = Catalogue
context_object_name = 'catalogues'
template_name = 'marketplace/catalogue_list.html'
paginate_by = 5
ordering = ['end_date']
def get_queryset(self):
if self.request.GET.get('ordering'):
ordering = self.request.GET.get('ordering')
else:
ordering = 'end_date'
query_set = Catalogue.objects.filter(admin_approved=True, end_date__gt=timezone.now()).order_by(ordering)
return query_set
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
if self.request.GET.get('paginate_by'):
context['paginate_by'] = self.request.GET.get('paginate_by')
else:
context['paginate_by'] = self.paginate_by
if self.request.GET.get('ordering'):
context['ordering'] = self.request.GET.get('ordering')
else:
context['ordering'] = self.ordering
return context
def get_paginate_by(self, queryset):
return self.request.GET.get('paginate_by', self.paginate_by)
ans