【问题标题】: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()

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

【问题讨论】:

    标签: python django


    【解决方案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。看看这个:stackoverflow.com/questions/14711203/…
      猜你喜欢
      • 2018-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-19
      • 2018-03-05
      相关资源
      最近更新 更多