Django будет разбивать на страницы набор запросов, исходящий из get_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 <b>get_queryset</b>(self, *args, **kwargs):
super().get_queryset(*args, **kwargs).filter(
author=self.request.user
).order_by('-date_posted')
Это добавит объект Page
в контекст с именем page_obj
. Таким образом, вы можете перебирать его с помощью:
{% for post in <b>page_obj</b> %}
{{ post }}
{% endfor %}
EDIT : или с условием:
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 <b>get_queryset</b>(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')
Примечание : Вы можете ограничить представления представлением на основе классов для аутентифицированных пользователей с помощью LoginRequiredMixin
mixin [Django -doc] .