首页 > 解决方案 > 在基于类的视图中访问当前登录的用户

问题描述

我正在尝试由当前登录的用户在基于类的视图中对一些模型数据进行排序。我怎么做?我尝试了以下方法,但没有奏效:

class ChatOverView(ListView):
    def get_queryset(self):
        return [Message.objects.filter(sender=self.request.user),
                Message.objects.filter(receiver=self.request.user)]

    model = {"received": get_queryset()[0], "sent": get_queryset()[1]}
    template_name = "chat/home-chat.html"

我收到以下错误消息:TypeError: get_queryset() missing 1 required positional argument: 'self'

感谢您的帮助!

编辑 我的目标是在我的网站上实现一个聊天系统。为了做到这一点,我建立了一个数据库来存储所有发送的消息。每个条目包含一个“发送者”和一个“接收者”字段。在此视图的帮助下,我想显示当前登录用户接收或发送的所有消息。

标签: pythondjangodjango-views

解决方案


您可以简单地覆盖get_context_data. 您可以让 DjangoListView处理其中一个列表,并自己处理另一个:

class ChatOverView(ListView):
    model = Message
    context_object_name = 'sent'
    template_name = 'chat/home-chat.html'

    def get_queryset(self):
        return super().get_queryset().filter(
            sender=self.request.user
        )

    def get_context_data(self, *args, **kwargs):
        context = super().get_context_data(*args, **kwargs)
        context.update(
            received=Message.objects.filter(receiver=self.request.user)
        )
        return context

推荐阅读