如果发生对话,则过滤掉用户
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/…以上是关于如果发生对话,则过滤掉用户的主要内容,如果未能解决你的问题,请参考以下文章