Здравствуйте!

Пытаясь сделать систему обмена сообщениями между пользователями (по типу как в ВК и прочих соц. сетях, только лайт-версию, без асинхронности и т.д.).

models.py

class Dialog(models.Model):
    class Meta:
        verbose_name = _('dialog')
        verbose_name_plural = _('dialogs')

        participants = models.ManyToManyField(User, verbose_name=_('participants'))

    def __str__(self):
        return _('Dialog #%s') % self.id

class Message(models.Model):
    class Meta:
        verbose_name = _('message')
        verbose_name_plural = _('messages')

    dialog = models.ForeignKey(Dialog, verbose_name=_('dialog'))
    author = models.ForeignKey(User, verbose_name=_('author'))
    txt = models.TextField(_('text of message'), blank=False)
    created = models.DateTimeField(_('created'), auto_now_add=True)
    deleted = models.BooleanField(_('deleted'), default=False)

    def __str__(self):
        return self.txt

Почти сразу столкнулся с проблемой.

views.py

def dialog_list(request):
    user_id = request.user.id
    dialogs = Dialog.objects.filter(participants=user_id)
    # Кроме списка самих диалогов (не самое удачное название,
    # но пусть пока будет так), надо ещё выбрать данные о
    # последнем сообщении в диалоге.
    return render_to_response('dialogs/dialog_list.html', locals())

Проблема описана в комментарии views.py. Не в сети, не в документации (хотя возможно, что что-то всё же пропустил) правильного и красивого решения не нашёл, по типу как нечто похожее есть с ForeignKey. Единственное, что приходит в голову... цикл. Но есть стойкое убеждение, что цикл породит большое количество запросов (при большом количестве диалогов), что не есть хорошо.

Собственно вопрос... Есть ли возможность с помощью Django ORM потянуть из базы не только список диалогов конкретного пользователя, но и данные о последнем сообщении в каждом диалоге, не используя цикл?