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')