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

标签 python sql django postgresql python-2.7

我有一个Message django-model,有字段:

  • id(主键)
  • user_sender(用户实例的外键)
  • user_receiver(用户实例的外键)
  • 发送日期(日期时间)
  • 消息(字符)
  • 状态( bool 值)

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

Examples:

If i have 3 users:

John send message to Sarah(17.08.2015) (id=1)

Sarah send message to John(20.08.2015) (id=2)

John send message to Max (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')

那么,我做错了什么?为什么在使用不同的外键后我收到 3 条消息?

更新#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)

最佳答案

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

关于python - 如何获取当前用户和其他用户之间的最后一条消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32673457/

相关文章:

python - 有没有更好的方法来编写这段代码来改变 python 中从 `list` 继承的对象?

sql - NOLOCK与事务隔离级别

mysql - 优化复杂的 MySQL 选择以进行报告

python - Django:第二次 Selenium 测试因 500 服务器错误而失败

python - 无法从 putty 运行 .py 文件,语法错误 : word unexpected (expecting ")")

python - 如何在 python 和 selenium 中禁用 chrome 通知弹出窗口?

mysql - 将第二个 MySQL 表中的数据添加到第一个表的结果中

python - 国际化 Django(在 OSX 上)

django - 是否使用 Django-Haystack?

python - python中如何获取时间和日期?