如果发生对话,则过滤掉用户

Posted

技术标签:

【中文标题】如果发生对话,则过滤掉用户【英文标题】:Filtering out the Users if Conversation occurred 【发布时间】:2018-02-09 05:30:38 【问题描述】:

这是我的模型

class Message(models.Model):
    sender = models.ForeignKey(User, related_name="sender")
    receiver = models.ForeignKey(User, related_name="receiver")
    msg_content = models.TextField()

只有在当前用户向他们发送消息或他们向当前用户发送消息时,我如何才能过滤掉用户,正如我们在社交网络上看到的那样?

【问题讨论】:

【参考方案1】:

试试这样的: 1. user_obj = User.objects.filter(sender__receiver__pk= request.user.id) 2. users = User.objects.filter(sender__receiver= request.user)

【讨论】:

【参考方案2】:

您可以将filter()Q 对象结合使用,这样您就可以进行更复杂的查询(在您的情况下,是一个OR 表达式):

>>> from django.db.models import Q
>>> user = request.user  # Take the current user
>>> Message.objects.filter(Q(sender=user) | Q(receiver=user))  # Filter messages where the sender or the receiver is the current user
<QuerySet [...]>

【讨论】:

先生,我什至使用过 .distinct() 但为什么它过滤掉的用户数量与发送的消息数量相同? @ShivamKumarDodval 我认为你应该使用.distinct('sender') 先生,它引发了一个错误“NotImplementedError at /messages/, DISTINCT ON fields is not supported by this database backend”。我目前正在使用 sqlite3。 @ShivamKumarDodval 那么我认为你应该执行 exclusive OR,而不是 OR。看看这个:***.com/questions/14711203/…

以上是关于如果发生对话,则过滤掉用户的主要内容,如果未能解决你的问题,请参考以下文章

如何利用FastReport的对话框过滤数据

目标 C:基于位置的过滤

如果一个列值仅与另一列中的一个值相关联,则过滤掉行

显示特定数据而不过滤掉查询数据

hbase 多条件查询or 怎么过滤掉不需要查的列

Kotlin 冒泡算法 ,高德地图 过滤掉两点之间距离小于50的数据,不重复显示