Подтвердить что ты не робот

Django Inner Join Queryset

Я работаю с 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 queryset? Спасибо.

4b9b3361

Ответ 1

A.objects.filter(b__c__isnull=False) выводит sql w/same result:

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 для идентификаторов?