【发布时间】:2015-12-16 20:50:39
【问题描述】:
我有一个 消息 django-model,带有字段:
- id(主键)
- user_sender(用户实例的外键)
- user_receiver(用户实例的外键)
- send_date(日期时间)
- 消息(字符)
- 状态(布尔值)
所以,我正在尝试获取当前用户和其他用户之间的所有最新消息。
例子:
如果我有 3 个用户:
约翰向莎拉发送消息(17.08.2015) (id=1)
莎拉向约翰发送消息(20.08.2015) (id=2)
John 向 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 条消息?
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)
【问题讨论】:
-
请展示您的模型的真实代码
-
如果您想通过此查询获取消息 2 和 3,那么您正在寻找来自或来自 John 的消息。但是消息 1 也来自 John。
-
@Pynchia 更新问题。
-
@Ivan 还有什么?您能提供丢弃重复外键对的解决方案吗?
-
@Ivan 说您的查询不符合您的要求。应该是
Message.objects.filter(user_sender_id=1).latest('send_date')
标签: python sql django postgresql python-2.7