Как получить значение Django PK в CBV без отображения в URL?

Мне в основном нужен PK пользователя, который вошел на мой сайт. Я не хочу, чтобы он отображался в URL, поэтому я не могу использовать kwargs. Но поскольку пользователь уже вошел в систему, я думаю, что должен быть способ получить доступ к первичному ключу пользователя. Есть ли у вас идеи, как это можно сделать? Я долго изучал StackOverflow, но не нашел ответа на свой вопрос, потому что большинство вопросов было о том, как получить PK, когда он отправляется в URL. Пожалуйста, помогите!

Да, вы можете работать с self.request.user.pk, или, если вам нужен объект пользователя, self.request.user.

Например, если у вас есть модель Post с полем author, которое ссылается на пользователя, вы можете отфильтровать его в ListView с помощью:

from django.contrib.auth.mixins import LoginRequiredMixin
from django.views.generic import ListView

class PostListView(LoginRequiredMixin, ListView):
    model = Post

    def get_queryset(self, *args, **kwargs):
        return super().get_queryset(*args, **kwargs).filter(
            author=self.request.user
        )

Вы можете работать с self.request.user только в методах представления на основе класса, но не в атрибутах View, не в classmethod или staticmethod.


Примечание: Вы можете ограничить представления на основе классов для аутентифицированных пользователей с помощью LoginRequiredMixin mixin [Django-doc].

Вернуться на верх