假设我有两个用户,每个用户都向第三个用户发送了两条消息,如下所示:
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)
答案 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')
会做你想做的事。