Как получить значение 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].