Доступ в настоящее время вошел в систему пользователя в представлении на основе классов - PullRequest
1 голос
/ 01 марта 2020

Я пытаюсь отсортировать некоторые данные модели в представлении класса на основе текущего пользователя, вошедшего в систему. Как я могу это сделать? Я попробовал следующее, но это не сработало:

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 Ответ

1 голос
/ 01 марта 2020

Вы можете просто переопределить get_context_data. Вы можете позволить Django ListView обрабатывать один из списков, а другой обрабатывать самостоятельно:

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

    def <b>get_queryset</b>(self):
        return super().get_queryset().filter(
            sender=self.request.user
        )

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