Запрос с двумя обратными отношениями в Django - PullRequest
0 голосов
/ 23 января 2020

Если у меня есть эти 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 имеют внешние ключи для двух других моделей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...