получение набора запросов, упорядоченного по полю, при удалении дубликатов на основе другого поля - PullRequest
0 голосов
/ 18 июня 2020

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

Модель:

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» каждого разговора, чтобы отсортировать разговоры на основе последнего отправленного сообщения. Интересно, есть ли способ решить эту проблему с помощью одного запроса, если нет, то каков будет лучший подход.

...