Производные классы Django ListView игнорируют поле paginate_by

#django #django-views #django-class-based-views

Вопрос:

Я использую Django 3.2

Я использую ООП, чтобы мой код оставался СУХИМ. У меня есть базовый класс Foo (производный от ListView), и я устанавливаю общие свойства в этом классе.

Затем у меня есть две специализации Foo, которые, как я ожидаю, будут осведомлены о paginate_by переменной — члене, однако подклассы, похоже, игнорируют переменную, которую я установил paginate_by , поскольку это не имеет никакого эффекта.

Это мой код:

 class UserFooList(LoginRequiredMixin, ListView):
    http_method_names = ['post']
    paginate_by = 2


    def post(self, request, *args, **kwargs):

        # some processing logic

        return render(request, '/path/to/Foo_list.html', context=context, status=status_code)


    
class UserApprovedFooList(UserFooList):
    
    def get_queryset(self):
        return Foo.objects.prefetch_related().filter(/* query criteria one */)

 

class UserFoosInModerationQueueList(UserFooList):
    
    def get_queryset(self):
        return Foo.objects.prefetch_related().filter(/* query criteria two */)
 

Почему paginate_by поле игнорируется UserApprovedFooList и UserFoosInModerationQueueList — и как мне это решить?

Комментарии:

1. Я только что воспроизвел это локально для себя, дочерний класс смог наследовать без проблем. Существует ли вероятность того, что ваша дочерняя функция get_queryset просто вернет меньше, чем ожидалось?

2. @Lewis в UserFoosInModerationQueueList , логика сложнее, и она может возвращать пустой список (не набор запросов). Я не знаю, важно ли это — в любом случае, в моих случаях использования возвращается непустой набор запросов.

3. Ну в таком случае, если чувствуете, что проблема может проистекать из этой логики. Исходя из информации, представленной в вопросе, код должен работать. Я бы предложил начать с оценки переменной класса paginate_by непосредственно перед render() вызовом, чтобы проверить, управлялась ли она логикой.