2015-12-07 3 views
1

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

This is the first message from user 1 
This is the second message from user 1 
This is the first message from user 2 
This is the second message from user 2 

Я пытаюсь выбрать самое последнее сообщение от каждого пользователя из моей PostgreSQL базы данных с этим:

messages = Message.objects.filter(message_to=request.user).distinct('message_from') 

Это дает мне первый объект он вытягивает от каждого пользователя, IE

This is the first message from user 1 
This is the first message from user 2 

Пока я хочу второй.

Я пробовал messages = Message.objects.filter(message_to=request.user).distinct('message_from', 'time_date').order_by( '-time_date'), чтобы отсортировать их, но это дает мне все 4 сообщения.

Как я могу получить последнее сообщение от каждого отдельного пользователя?

EDIT:

Модель Message:

class Message(models.Model): 
    message_from = models.ForeignKey(User, related_name="%(class)s_message_form") 
    message_to = models.ForeignKey(User, related_name="%(class)s_message_to") 
    message = models.TextField() 
    files = models.ForeignKey(File, blank=True, null=True) 
    read = models.BooleanField(default=False) 
    time_date = models.DateTimeField(default=django.utils.timezone.now) 
+0

Можете ли вы показать код для своей модели сообщений? Может быть полезно. –

+0

Я добавил код для модели целиком. – Nanor

ответ

0

Вы не могли бы быть в состоянии получить весь Message объект, но вы можете поместить столько полей в values, как вы хотите сделать это в один оператор:

from django.db.models import Max 
Message.objects.values('message_from').annotate(latest_msg=Max(time_date)) 
0

Я думаю

Message.objects.filter(message_to=request.user).order_by('message_from', 
     '-time_date').distinct('message_from') 

будет делать то, что вы хотите.

Смежные вопросы