【问题标题】:Joining two tables with in clause用 in 子句连接两个表
【发布时间】:2014-07-20 08:11:54
【问题描述】:

所以我有两个模型包含主键“用户”

class Reviews(models.Model):
    subject_user = models.ForeignKey(User,related_name='reviewed_user')

class Friendship(models.Model):
    head_user = models.ForeignKey(User,related_name='followed')

现在我想查找同样在 Friendsip.head_user 中的用户的所有评论...类似这样的东西

SELECT * FROM reviews JOIN friendship WHERE reviews.subject_user_id IN friendship.head_user_id

OR

SELECT * FROM reviews JOIN friendship ON reviews.subject_user_id = friendship.head_user_id

我怎样才能在 Django 中做到这一点。 SQL(可能不完美)只是为了解释我正在尝试做的事情。

【问题讨论】:

  • Django ORM 与 SQL 有点不同。输出数据应该是什么样子?
  • 好的,我需要的是评论对象列表和所有相应的用户对象(每个评论都有一个 subject_user)。

标签: mysql sql django


【解决方案1】:

使用选择相关

Reviews.objects.all().select_related('friendship__ head_user_id')

或阅读lookups that span relationship

或者这可能会有所帮助:'F expressions'

【讨论】:

  • 在您的回答中,您使用.all() 进行评论并忽略了subject_user 部分。实际上,我在评论模型中还有许多其他字段,例如 tail_user = models.ForeignKey(User) 等等等等......所以它应该像 Reviews.objects.all().select_related('friendship__ head_user_id','reviews__subject_user_id')
  • 这个答案非常具有误导性——甚至是错误的。 select_related 不会以任何方式将来自外部模型的列添加到基础对象中。它所做的只是使已经存在的外键关系更有效。
  • 据我了解,他只是想拥有外键(加入),而不是添加新的 culomns,select_related 就是这样做的..
  • 对不起,如果我对这个问题不是很清楚。我用示例here 重新询问了它
猜你喜欢
  • 2015-02-24
  • 1970-01-01
  • 1970-01-01
  • 2019-08-23
  • 2021-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多