как использовать paginate, это не работает - PullRequest
2 голосов
/ 09 мая 2020

views.py paginate_by не работает, а 'if' оператор не работает в 'get_queryset' есть ли способ работать с этим

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)

1 Ответ

2 голосов
/ 09 мая 2020

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] .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...