Django 内连接查询集

Posted

技术标签:

【中文标题】Django 内连接查询集【英文标题】:Django Inner Join Queryset 【发布时间】:2013-06-26 21:26:33 【问题描述】:

我正在使用 Django,我需要使用两个内部连接来执行查询集。

我有三个模型 A、B 和 C,我想在 psql 中进行如下查询:

SELECT DISTINCT a FROM A
INNER JOIN B ON B.a_id = A.id
INNER JOIN C ON C.b_id = B.id;

型号:(仅包括相关字段)

class A(models.Model):
    id = models.IntegerField(primary_key=True)

class B(models.Model):
    id = models.IntegerField(primary_key=True)
    a = models.ForeignKey(A, null=True, blank=True,on_delete=models.SET_NULL)

class C(models.Model):
    b = models.ForeignKey(B, null=True, on_delete=models.SET_NULL)   

因此,C 中的所有内容都链接回 B 中的一件事,B 中的所有内容都链接回 A 中的一件事。我想尝试获取 A 中所有在 C 中具有某些内容的不同元素。

如何使用 django 查询集执行此操作?谢谢。

【问题讨论】:

如果你展示你的模型,并告诉你想要完成什么,那就太好了 @karthikr 添加了模型和我想要做的事情 【参考方案1】:

A.objects.filter(b__c__isnull=False) 产生一个具有相同结果的 sql:

SELECT DISTINCT a.* FROM a 
INNER JOIN b ON (a.id = b.a_id)
INNER JOIN c ON (b.id=c.b_id)
WHERE c.id IS NOT NULL;

附:为什么你使用IntegerField 而不是AutoField 作为id?

【讨论】:

太棒了,谢谢!我其实用的是AutoField,只是复制错了。

以上是关于Django 内连接查询集的主要内容,如果未能解决你的问题,请参考以下文章

django - 内部连接查询集不起作用

我将如何将这些多个连接作为 Django 查询集进行?

构造一个 django 查询集,用于对内部连接进行排序

两列连接后的 Django 查询集过滤器

内连接子查询 Django ORM 等效

如何使用 StringAgg 或 ArrayAgg 连接多个子行中的一列来注释 django 查询集?