Django查询:按会话分组的最后收到的邮件

我的模特:


class Mail(models.Model):

    subject = models.CharField(max_length=300)

    message = models.TextField()

    receiver = models.ForeignKey(User, related_name='receiver', on_delete=models.CASCADE)

    sender = models.ForeignKey(User, related_name='sender', on_delete=models.CASCADE)

    sent_date = models.DateTimeField(auto_now_add=True)

    conversation = models.ForeignKey(Conversation, on_delete=models.CASCADE)

    read = models.BooleanField(default=False)

我的查询:


Conversation.objects.filter(mail__receiver=request.user).annotate(latest_msg=Max('mail__id')).values('id','mail__id','mail__subject','mail__message','mail__sender__username','mail__sent_date','mail__read').order_by('-latest_msg')

它返回所有对话,其中包含登录用户(request.user)收到的任何邮件。为什么?我想要按会话分组的最新收到的邮件,例如Gmail。




白板的微信
浏览 136回答 1
1回答

精慕HU

我知道了。这是查询:maxMailsIds = Conversation.objects.filter(mail__receiver=user).annotate(maxId=Max('mail__id')).values_list('maxId', flat=True)items = Mail.objects.filter(id__in=maxMailsIds).order_by('-id').values('subject','message')
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python