来自 Django 中两个不直接相关的模型的内部连接
Posted
技术标签:
【中文标题】来自 Django 中两个不直接相关的模型的内部连接【英文标题】:Inner join from two not directly related models in Django 【发布时间】:2011-09-29 19:42:26 【问题描述】:假设我有这样的模型(为清楚起见,删除了所有不相关的字段):
A(Model):
someFields = ... #irrelevant in this case
B(Model):
a = ForeignKey(A)
my_data = ... #the data I need to retrieve
C(Model):
user = ForeingKey(User)
a = ForeignKey(A)
class Meta:
unique_together = ('user', 'a')
现在,我如何使用 Django 查询获得与此 SQL 等效的内容:
SELECT my_data FROM B WHERE B.a_id = C.a_id AND C.user = %user%
【问题讨论】:
【参考方案1】:幸运的是,您的查询使用了现有关系。
B.objects.filter(a__c__user=someuser).distinct().values('my_data')
【讨论】:
谢谢,不知道a__c
会自动出现
其实我刚刚检查过,它会生成类似SELECT my_data FROM B INNER JOIN A on B.a_id = A.id INNER JOIN C ON A.id = C.a_id WHERE user = someuser
的SQL,这使得对表A 进行不必要的索引扫描。
这就是 Django 的工作原理。如果您想做得更好,则需要使用原始查询。以上是关于来自 Django 中两个不直接相关的模型的内部连接的主要内容,如果未能解决你的问题,请参考以下文章