如何在当前用户和其他人之间获取最后一条消息?

问题描述 投票:4回答:2

我有一个Message django模型,带有字段:

  • id(主键)
  • user_sender(用户实例的外键)
  • user_receiver(用户实例的外键)
  • 发送日期(DateTime)
  • 消息(字符)
  • 状态(布尔)

所以,我正在尝试获取当前用户和其他用户之间的所有最新消息。

示例:

如果我有3个用户:

[约翰向莎拉发送消息(17.08.2015)(id = 1)

萨拉发送消息给约翰(20.08.2015)(id = 2)

[约翰向马克斯发送消息(18.08.2015)(id = 3)

我只需要获取ID为2和3的邮件。

我正在尝试查询,但收到所有3条消息:

Message.objects.filter(
            Q(user_sender_id=1) |
            Q(user_receiver_id=1)).\
order_by('user_sender', 'user_receiver', '-send_date').\
distinct('user_sender', 'user_receiver')

所以,我在做什么错?为什么在使用distinct by外键后我收到3条消息?

UPD#1:

class Message(models.Model):
    """
    Model for user messages.
    - Who
    - Whom
    - When
    - Message
    - Status
    """
    user_sender = models.ForeignKey(User, related_name="sender")
    user_receiver = models.ForeignKey(User, related_name="receiver")
    send_date = models.DateTimeField(auto_now_add=True)
    message = models.CharField(max_length=500)
    status = models.BooleanField(default=False)

    def __unicode__(self):
        return u'%s %s ->%s' % (self.send_date, self.user_sender, self.user_receiver)
python sql django postgresql python-2.7
2个回答
2
投票
sent = Message.objects.filter(user_sender_id=1).order_by('-send_date')[:1]
received = Message.objects.filter(user_receiver_id=1).order_by('-send_date')[:1]

from itertools import chain

messages = list(chain(sent, received))

0
投票

要获取当前用户和其他用户之间的所有最后一条消息:

© www.soinside.com 2019 - 2024. All rights reserved.