Как вывести пользователей, с которыми общался в чате django?

Я столкнулся с проблемой, что не могу вывести пользователей, с кем общался в чате, а именно кто мне писал или кому я писал. Пытался вывести через данную функцию: views.py:

def send_chat(request):
resp = {}
User = get_user_model()
if request.method == 'POST':
    post =request.POST
    u_from = UserModel.objects.get(id=post['user_from'])
    u_to = UserModel.objects.get(id=post['user_to'])
    messages = request.user.received.all()
    pk_list = messages.values_list('user_from__pk',flat=True).distinct()
    correspondents = get_user_model().objects.filter(pk__in=pk_list)
    insert = chatMessages(user_from=u_from,user_to=u_to,message=post['message'],correspondents=correspondents)
    try:
        insert.save()
        resp['status'] = 'success'
    except Exception as ex:
        resp['status'] = 'failed'
        resp['mesg'] = ex
else:
    resp['status'] = 'failed'

где, как раз строки:

messages = request.user.received.all()
    pk_list = messages.values_list('user_from__pk',flat=True).distinct()
    correspondents = get_user_model().objects.filter(pk__in=pk_list)

отвечают за вывод, но выходит проблема связанная с моделями models.py:

class chatMessages(models.Model):
user_from = models.ForeignKey(User,
    on_delete=models.CASCADE,related_name="sent")
user_to = models.ForeignKey(User,
    on_delete=models.CASCADE,related_name="received")
message = models.TextField()
date_created = models.DateTimeField(default=timezone.now)
correspondents = models.ForeignKey(User,
    on_delete=models.CASCADE,related_name="correspondents", null=True)

def __str__(self):
    return self.message

ошибка: ValueError: Cannot assign "<class 'django.contrib.auth.models.User'>": "chatMessages.correspondents" must be a "User" instance.

Как мне исправить данную ошибку и вывести пользователей в чат: html:

<div class="container" style="height: 75%;">
<div class="card bg-dark h-100 border-light">
    <div class="card-body h-100">
        <div class="row h-100">
            <div class="col-md-4 border-right h-100">
                <div class="list-group bg-dark anyClass" id='user-list'>

                    {% for u in users %}
                    {% if not u.id == 1 and not u.id == user.id %}
                    <a class="list-group-item {% if u.id != chat_id %}bg-dark{% else %}bg-primary{% endif %} text-white" href="{% url 'chat-home' %}?u={{u.id}}">
                        <div>
                            <p>{{u.first_name}} {{u.last_name}} ({{u.username}})</p>
                        </div>
                    </a>
                    {% endif %}
                    {% endfor %}
                </div>
            </div>
            <div class="col-md-8 h-100">
                {% if not chat_id > 0 %}
                <div class="h-100 d-flex flex-column justify-content-center align-items-center">
                    <h3>Начните общение!</h3>
                    <p><small class="text-muted">Выберете человека, чтобы написать ему.</small></p>
                </div>
                {% else%}
                <div id="chat-box-field" class="h-100">
                    <div class="chat-box" style="height:80%">
                        {% for chat in chats %} {% if chat.user_from == user %}
                        <div class="p-2 w-100 d-flex justify-content-end">
                            <div class=" chat-bubble  ml-2 mb-2 bg-primary text-light rounded" data-id="{{chat.id}}">
                                <p>{{chat.message}}</p>
                                <div class="d-flex justify-content-between"><small>Ты</small> <small>{{chat.date_created|date:"M-d-Y H:i"}}</small></div>
                            </div>
                        </div>
                        {% else %}
                        <div class="p-2 w-100 d-flex justify-content-start">
                            <div class="chat-bubble mr-2 mb-2 bg-light text-dark rounded" data-id="{{chat.id}}">
                                <p>{{chat.message}}</p>
                                <div class=" d-flex justify-content-between"><small>От</small> <small>{{chat.date_created|date:"M-d-Y H:i"}}</small></div>
                            </div>
                        </div>
                        {% endif %} {% endfor %}
                    </div>
                    <div class="chat-box-form border-top p-2" style="height:20%">
                        <div class="w-100 h-100">
                            <form action="" id="chat-submit" class="h-100 d-flex ">
                                <input type="hidden" name="user_from" value="{{ user.id }}">
                                <input type="hidden" name="user_to" value="{{ chat_id }}">
                                <div class="col-md-10 h-100">
                                    <textarea name="message" id="" class="h-100 w-100 form-control" placeholder="Написать"></textarea>
                                </div>
                                <button class="button btn btn-primary h-100 w-100 justify-content-center align-items-center d-flex">Отправить</button>
                            </form>
                        </div>
                    </div>
                </div>
                {% endif %}
            </div>
        </div>
    </div>
</div>

Пример, как выглядит сам чат: введите сюда описание изображения

Этот вопрос решается с помощью related objects У тебя есть отношение твоих chatMessages с User для полей user_from и user_to. С помощью _set ты можешь получить все сообщения твоего юзера.

user = User.objects.get(pk=1)

user.user_from_set.values('user_to').distinct() получим все сообщения где твой пользователь автор для уникальных получателей

Вернуться на верх