我正在和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查询集进行此操作?谢谢。

最佳答案

A.objects.filter(b__c__isnull=False)results a sql w/same results:

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;

P.S.为什么要使用IntegerField而不是AutoField作为ID?

07-26 09:38
查看更多