Прочитанные и непрочитанные сообщения каналов Django

Я новичок в каналах django и пытаюсь построить приложение чата, я встретил некоторые проблемы в разработке read и unread функционирования, я надеюсь, что вы можете дать мне руку.


потребитель чата имеет очень простую структуру:

имя комнаты chat_1 предназначено для пользователя 1 для получения сообщений. кто бы ни подключился к ней, он может отправить сообщение пользователю 1, а метод сохранения в базе данных определен в потребителе, который принимает self.scope["user"] в качестве отправителя и self.room_name в качестве получателя, чтобы создать запись сообщения и пометить его как непрочитанное

У пользователя есть список друзей, при нажатии на имя, загружаются все сообщения, при этом все сообщения помечаются как прочитанные, я сделал это с помощью ajax функции, а не ws, т.к. пользователь кликает в сторону от цели разговора.

но вот один сценарий, где два пользователя находятся на странице друг друга и не кликают никого другого, мне нужно инициировать сообщение с read already при создании в базе данных.

Допустим, user_1 разговаривает с user_22, user_1 подключается ко многим ws, но в данный момент стоит перед ws_22, чтобы отправить сообщение user_22. В методе получения, как я могу определить, находится ли user_22 в данный момент перед ws_1, который ожидает сообщения?

Говоря "сталкиваться", я не имею в виду подключение к веб-сокету, пользователь подключается ко многим ws одновременно, соответствующим его друзьям (у каждого друга есть уникальный ws для получения сообщения), я имею в виду перейти на страницу чата пузырьков с целевым пользователем, нажав на аватар пользователя


если вас смутило или напрягло какое-либо мое выражение, извините за беспокойство. однако, если у вас есть какие-либо предложения или что-либо, на что мне следует обратить внимание, я буду более чем благодарен.

chat consumer

message model

class Message(models.Model):
    sender = models.ForeignKey(ChatProfile, on_delete=models.CASCADE, related_name='sent')
    receiver = models.ForeignKey(ChatProfile, on_delete=models.CASCADE, related_name='received')

    text = models.TextField(blank=1, null=1)
    image = models.FileField(upload_to='chatprofile_image', blank=1, null=1)
    file = models.FileField(upload_to='chatprofile_file', blank=1, null=1)
    audio = models.BinaryField(blank=1, null=1) 

    createTime = models.DateTimeField(default=now)
    read = models.BooleanField(default=False)
    style = models.CharField(max_length=50, blank=1, null=1)

chat profile model

class ChatProfile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='chatProfile')
    # mutual added relationship
    friends = models.ManyToManyField(User, blank=1, related_name='friends')
    online = models.BooleanField(default=False)
Вернуться на верх