在基于类的视图中访问当前登录的用户

时间:2020-03-01 12:47:31

标签: python django django-views

我正在尝试由当前登录的用户在基于类的视图内对某些模型数据进行排序。我怎么做? 我尝试了以下操作,但没有成功:

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'

感谢您的帮助!

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

1 个答案:

答案 0 :(得分:1)

您可以简单地覆盖get_context_data。您可以让Django ListView处理其中一个列表,而自己处理另一个列表:

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