Я пытаюсь создать простое приложение чата для своего веб-сайта, изменяя прямые сообщения.
Модель:
class Message(models.Model):
content = models.TextField(_('Content'))
sender = models.ForeignKey(AUTH_USER_MODEL, related_name='sent_dm', verbose_name=_("Sender"),on_delete= models.CASCADE)
recipient = models.ForeignKey(AUTH_USER_MODEL, related_name='received_dm', verbose_name=_("Recipient"),on_delete= models.CASCADE)
sent_at = models.DateTimeField(_("sent at"), null=True, blank=True)
read_at = models.DateTimeField(_("read at"), null=True, blank=True)
Функция, которая возвращает всех участников беседы в виде набора:
def get_conversations(self, user):
all_conversations = Message.objects.all().filter(Q(sender=user) | Q(recipient=user))
contacts = []
for conversation in all_conversations:
if conversation.sender != user:
contacts.append(conversation.sender)
elif conversation.recipient != user:
contacts.append(conversation.recipient)
# To abolish duplicates
return list(set(contacts))
Я пытаюсь получить набор пользователей, с которыми связались, упорядоченные по полю «sent_at» каждого разговора, чтобы отсортировать разговоры на основе последнего отправленного сообщения. Интересно, есть ли способ решить эту проблему с помощью одного запроса, если нет, то каков будет лучший подход.