#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()
вызовом, чтобы проверить, управлялась ли она логикой.