Группировать личные сообщения в Django по пользователям - PullRequest
0 голосов
/ 26 января 2019

Я создал систему личных сообщений для зарегистрированных пользователей в Django, и у меня небольшая проблема. Я не могу придумать способ группировки сообщений по пользователям.

На рисунке ниже показаны сообщения между двумя пользователями. Это разговор, увиденный пользователем karolann . Вы можете видеть, что он не группирует сообщения правильно. Предложения «Привет Сьюзан» и «Эти два модуля довольно сложные» должны следовать после последнего предложения - «Напиши мне, когда ты в сети». .

В данный момент сообщения группируются по отправителю. Если я сгруппирую их по получателю, он все равно не будет работать должным образом. Для этого нужно что-то общее для обоих, например идентификатор разговора или что-то в этом роде.

Итак, мой вопрос: как мне создавать разговоры? Я хочу, чтобы все сообщения между двумя пользователями были в одном месте.

enter image description here

Мой models.py выглядит следующим образом: enter image description here

Мой views.py выглядит следующим образом: enter image description here

И, наконец, мой шаблон: enter image description here

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019

Для тех, кто пытается сделать это в Django, я рекомендую это решение - https://stackoverflow.com/a/43697388/10036828.

Это единственный способ заставить его работать.

0 голосов
/ 27 января 2019

Вы должны применить несколько фильтров для отправителя и получателя вместе со стороны обоих пользователей, а затем присоединиться к ним. Использование dictsort и regroup не будет работать в таком случае.

Чтобы получить все сообщения в разговоре пользователя / другого_пользователя, вам необходимо:

Message.objects.filter(sender=user.profile, reciever=other_user.profile)|Message.objects.filter(receiver=user.profile, sender=other_user.profile)

(Примечание | оператор может использоваться для объединения)

Вы должны создать эти запросы для каждого диалога в представлении и передать список этих запросов в контексте шаблона.

...