Не могу корректно вывести диалоги в личных сообщениях django

Рейтинг: 0Ответов: 1Опубликовано: 09.06.2023

Есть 3 пользователя, у каждого есть свой диалог (user1 -msg- user2) (user3 -msg- user2).

class Message(models.Model):
    sender = models.ForeignKey(User, related_name="sender",on_delete=models.DO_NOTHING,)
    reciever = models.ForeignKey(User, related_name="reciever",on_delete=models.DO_NOTHING,) 
   
    msg_content = models.TextField(null='True')
    class Meta:
        verbose_name_plural = "Postings"``` это файл models

Это функция из views для вывода сообщения из бд:

test = Message.objects.all()
for xx in test:
    print("#################")
    print("отправитель",xx.sender)
    print("получатель",xx.reciever)
    print("текст mess", xx.msg_content)
    if request.user.username == str(xx.sender):
        id_poluh = str(xx.reciever)
        if id_poluh == username:
            xxx = Message.objects.all()
            for xr in xxx:
                if (str(xr.reciever)) == username:
                    int(xr.reciever.id)
                    entries = 
Message.objects.filter(Q(sender=request.user.id) | 
Q(sender=int(xr.sender.id)))

Ответы

▲ 0

Всё, я разобрался, сделал-по другому функцию.
Я создал пустой список, и туда через цикл добавлял нужные сообщения:

test = Message.objects.all()
    message_list = []
    for chek1 in test:
        if str(chek1.sender) == request.user.username:
            if str(chek1.reciever) == username:
                entries = (chek1.id, chek1.msg_content)
                message_list.append(entries)
        if str(chek1.reciever) == request.user.username:
            if str(chek1.sender) == username:
                entries = (chek1.id, chek1.msg_content)
                message_list.append(entries)