def chat_by_user(request, chat_username): if chat_username == request.user.username: return redirect(reverse('chat_list')) chat_user = get_object_or_404(User, username=chat_username) msg_form = MessageForm(request.POST or None) if msg_form.is_valid(): msg_text = msg_form.cleaned_data['msg_text'] Message.objects.create(receiver=chat_user, sender=request.user, msg_text=msg_text) return redirect(reverse('chat_by_user', args=[chat_username])) cur_user_msgs = Message.user_msgs(request.user) msgs_by_user = cur_user_msgs.filter( Q(sender=chat_user) | Q(receiver=chat_user)).order_by('date_sent') all_conversations = conversations_list(request.user) context = { 'all_conversations': all_conversations, 'msg_form': msg_form, 'new_all_msgs': msgs_by_user, 'chat_user': chat_user, 'chat_username': chat_username, } return render(request, 'core/chat.html', context)
def conversations_list(user: User): dialog_msgs = Message.user_msgs(user) all_conversations = [] used_interlocutors = set() for msg in dialog_msgs: if msg.sender == user: interlocutor = msg.receiver else: interlocutor = msg.sender if interlocutor not in used_interlocutors: all_conversations.append({ "object": interlocutor, "date": msg.date_sent }) used_interlocutors.add(interlocutor) for group in user.inside_group_chats.all(): msg = Message.objects.filter( group_chat_in=group).order_by('-date_sent').first() if msg is None: _date = group.date_created else: _date = msg.date_sent all_conversations.append({"object": group, "date": _date}) all_conversations.sort(key=lambda o: o["date"], reverse=True) return all_conversations