【问题标题】:Filtering out the database for multiple foreign key过滤出多个外键的数据库
【发布时间】:2017-08-27 14:43:28
【问题描述】:

这是我的模型

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

如何过滤掉两个用户之间的消息? 我做了这样的事情,它分别给出消息,我无法像我们在社交网站上看到的那样在一个列表中过滤掉它们。

data1 = Message.objects.filter(sender_id=id, receiver_id=request.user.id)
data2 = Message.objects.filter(receiver_id=id, sender_id=request.user.id)

请帮我处理这段代码。提前致谢!

【问题讨论】:

    标签: python django messages


    【解决方案1】:

    我认为在这种情况下你应该使用Q。像这样的:

    from django.db.models import Q
    
    data = Message.objects.filter(
        Q(sender_id=id,receiver_id=request.user.id) | Q(sender_id=request.user.id,receiver_id=id)
    )
    

    【讨论】:

    • 这会得出同样的结果吗?:data1 = Message.objects.filter(sender_id__in=[id, request.user.id], receiver_id__in=[id, request.user.id])
    • 我认为一个人从别人那里得到消息给自己,但这些消息很可能不存在。
    • @Reza 是,如果用户无法向自己发送消息。如果可以的话,在您的查询中,您还会看到从 request.user.id 到 request.user.id 的消息。
    • 太棒了!连同 order_by(id) 完全按照它应该的方式工作。谢谢春日步先生。我很荣幸加入这个伟大的社区!
    猜你喜欢
    • 2020-07-03
    • 2013-05-22
    • 1970-01-01
    • 1970-01-01
    • 2018-08-28
    • 2012-11-30
    • 1970-01-01
    • 1970-01-01
    • 2017-11-03
    相关资源
    最近更新 更多