从不同的用户获取最新消息

时间:2015-12-07 12:49:05

标签: python django postgresql

假设我有两个用户,每个用户都向第三个用户发送了两条消息,如下所示:

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')

这给了我从每个用户那里得到的第一个对象,I.E。

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条消息。

如何从每个用户那里获取最新消息?

编辑:

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)

2 个答案:

答案 0 :(得分:0)

您可能无法获取整个Message对象,但您可以在values中放置尽可能多的字段,如下所示:

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

答案 1 :(得分:0)

我认为

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

会做你想做的事。