Получить идентификатор пользователя из представления на основе классов

#python #django #class #view

Вопрос:

У меня есть представление на основе классов:

 class PostListViewMojeReported(ListView):

    def get_username(self, **kwargs):
        login_username = request.user.username
        context = {'login_username': login_username}
        return context

    model = Post
    template_name = 'blog/filter_moje_reported.html'
    context_object_name = 'posts'
    queryset = Post.objects.filter(Q(status='Otvorena') amp; (Q(res_person_1_username=username) | Q(res_person_2_username=username)))
    ordering = ['-date_posted']
    paginate_by = 30

 

Я не знаю, как получить имя пользователя от текущего пользователя, вошедшего в систему, для использования в качестве фильтра в моем наборе запросов. Мне нужно сравнить текущего пользователя, вошедшего в систему, с «именем пользователя res_person_1_username» и «именем пользователя res_person_2_username».

Ответ №1:

Вы можете получить объект requerst с self.request помощью , так что:

 class PostListViewMojeReported(ListView):
    model = Post
    template_name = 'blog/filter_moje_reported.html'
    context_object_name = 'posts'
    paginate_by = 30

    def get_username(self, **kwargs):
        login_username = self.request.user.username
        context = {'login_username': login_username}
        return context

    def get_queryset(self, *args, **kwargs):
        username = self.request.user.username
        return super().get_queryset(*args, **kwargs).filter(
           Q(res_person_1_username=username) | Q(res_person_2_username=username),
           status='Otvorena'
        ).order_by('-date_posted') 

Однако я бы посоветовал работать с двумя ForeignKey s в модели пользователя, а не сохранять имя пользователя, так как возможно, что позже пользователь удалит свою учетную запись, а другой человек затем создаст учетную запись с этим именем пользователя.

Комментарии:

1. Спасибо вам за решение, оно сработало безупречно. И за совет.