Если у меня есть эти Django модели:
class ModelA(Model):
pass
class ModelB(Model):
a = ForeignKey(ModelA, ...)
d = ForeignKey(ModelD, ...)
r = IntegerField()
q = IntegerField()
class ModelC(Model):
a = ForeignKey(ModelA, ...)
d = ForeignKey(ModelD, ...)
r = IntegerField()
class ModelD(Model):
pass
Как мне сделать Django запрос ORM, эквивалентный следующему:
select ModelB.q, ModelA.id, ModelD.id
from ModelA
join ModelB on ModelB.a_id=ModelA.id
left join ModelC on (ModelC.a_id=ModelB.a_id and ModelC.r=ModelB.r
and ModelC.d_id=ModelB.d_id)
join ModelD on ModelB.d_id=ModelD.id
where ModelC.id is null
Т.е. получить ModelB
с чьи поля не совпадают с ModelC
s, где оба ModelB
и ModelC
имеют внешние ключи для двух других моделей.