我有一个包含三个字段的聊天消息模型:
发件人、收件人(用户模型的 ForeignKey)和作为 TextField 的消息。
我正在尝试选择与任一发件人或收件人字段(不包括 request.user)的所有唯一对话。我对如何实现它有点困惑。
我有2个问题:
Message.objects.filter(Q(sender = request.user)|Q(recipient = request.user)).values('sender').distinct()
不返回唯一记录列表(即使使用 order_by )。我有很多完全相同的发件人:({'sender': 4L}, {'sender': 4L}
收件人也是如此)。
第二个问题是:
我是否需要连接两个 queysets(用于发件人和收件人)或者还有另一种方法来获取当前 request.user 的整个对话列表?
更新。好的,这是表格内容:
mysql> select id, sender_id, recipient_id, body from messages_message ;
+----+-----------+--------------+-----------+
| id | sender_id | recipient_id | body |
+----+-----------+--------------+-----------+
| 1 | 4 | 1 | Message 1 |
| 2 | 4 | 1 | Message 2 |
+----+-----------+--------------+-----------+
这是结果
Message.objects.filter(Q(sender = request.user)|Q(recipient = request.user)).values('sender').distinct()
[{'sender': 4L}, {'sender': 4L}]
但我预计只会得到一个[{'sender': 4L}]
.
那么,怎么了?
更新2。我的模型:
class Message(models.Model):
body = models.TextField(_("Body"))
sender = models.ForeignKey(User, related_name='sent_messages', verbose_name=_("Sender"))
recipient = models.ForeignKey(User, related_name='received_messages', null=True, blank=True, verbose_name=_("Recipient"))
sent_at = models.DateTimeField(_("sent at"), null=True, blank=True)
我需要选择当前用户的所有对话伙伴(向 request.user 发送或接收消息的人)。