Python 如何使用分页由这是行不通的

Python 如何使用分页由这是行不通的,python,django,Python,Django,views.pypaginate\u by不起作用,而“get\u queryset”中的“if”语句不起作用,是否有任何方法可以处理此问题 class PostListView(ListView): model = Post template_name = 'all_users/public/main.html' context_object_name = 'posts' paginate_by = 3 def get(self, request, *

views.py
paginate\u by不起作用,而“get\u queryset”中的“if”语句不起作用,是否有任何方法可以处理此问题

class PostListView(ListView):
    model = Post
    template_name = 'all_users/public/main.html'
    context_object_name = 'posts'
    paginate_by = 3

    def get(self, request, **kwargs):
        if request.user.is_public:
            post = Post.objects.filter(patient=self.request.user).order_by('-date_posted')
            context = {
                'posts': post,
            }
            return render(request, self.template_name, context)

        else:
            query = self.request.session['query']
            post = Post.objects.filter(patient=User.objects.get(username=query)).order_by('-date_posted')
            context = {
                'posts': post,
            }
        return render(request, self.template_name, context)

Django将对源自
get\u queryset
的queryset进行分页。因此,您可以通过以下方式实现视图:

from django.contrib.auth.mixins import LoginRequiredMixin

class PostListView(LoginRequiredMixin, ListView):
    template_name = 'all_users/doctor/main.html'
    model = Post
    context_object_name = 'posts'
    paginate_by = 3

    def get_queryset(self, *args, **kwargs):
        super().get_queryset(*args, **kwargs).filter(
            author=self.request.user
        ).order_by('-date_posted')
编辑:或带有条件:

from django.contrib.auth.mixins import LoginRequiredMixin

class PostListView(ListView):
    template_name = 'all_users/doctor/main.html'
    model = Post
    context_object_name = 'posts'
    paginate_by = 3

    def get_queryset(self, *args, **kwargs):
        qs = super().get_queryset(*args, **kwargs)
        if self.request.user.is_public:
            qs = qs.filter(
                author=self.request.user
            )
        else:
            qs = qs.filter(
                patient__username=self.request.session['query']
            )
        return qs.order_by('-date_posted')
来自django.contrib.auth.mixins导入登录所需的mixin
类PostListView(ListView):
template_name='all_users/doctor/main.html'
型号=员额
上下文\对象\名称='posts'
分页单位=3
def get_queryset(self、*args、**kwargs):
qs=super().get_queryset(*args,**kwargs)
如果self.request.user.u是公共的:
qs=qs.filter(
author=self.request.user
)
其他:
qs=qs.filter(
患者\用户名=self.request.session['query']
)
返回qs.订单日期('-date\u posted')
注意:您可以将基于类的视图限制为具有


你的答案有效,但我想在这个类中添加IF-Else条件。如果Else条件在“get_queryset”中不起作用。你能帮我吗?
from django.contrib.auth.mixins import LoginRequiredMixin

class PostListView(ListView):
    template_name = 'all_users/doctor/main.html'
    model = Post
    context_object_name = 'posts'
    paginate_by = 3

    def get_queryset(self, *args, **kwargs):
        qs = super().get_queryset(*args, **kwargs)
        if self.request.user.is_public:
            qs = qs.filter(
                author=self.request.user
            )
        else:
            qs = qs.filter(
                patient__username=self.request.session['query']
            )
        return qs.order_by('-date_posted')