Пагинация с упорядочиванием и другими переменными 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

Вернуться на верх