Django двойное соединение через несколько моделей - PullRequest
0 голосов
/ 26 мая 2011

Ситуация

У меня 3 модели.Модель A, модель B и модель C.

class A(Model):
    B_id = ForeignKey(B)
    id = IntegerField()
    pub_date = DateField()

class B(Model):
    id = IntegerField(primary_key = True)

class C(Model):
    B_id = ForeignKey(B)
    pub_date = DateField()
    information = TextField()

Модель A и модель C имеют поле под названием B_id, которое является внешним ключом для модели B. Таким образом, прямой связи между B иA или C.

Цель

Мне дан идентификатор из модели A. Теперь мне нужна вся информация из C, где pub_date совпадает с pub_date в A, а B_id совпадает с B_id в A.

В SQL это будет довольно простой запрос:

SELECT C.information FROM A JOIN C USING(B_id, pub_date) WHERE A.id = 1234;

Но я просто не могу понять, как это сделать в синтаксисе Django ORM, например filter() -Предложение работает только в том случае, если существует прямой путь соединения от C к A.

-

Редактировать: Учтите, что в A имеется более одной строки, которая соответствует одному идентификатору.

1 Ответ

3 голосов
/ 26 мая 2011

EDIT:

Попробуйте это:

 A.objects.filter(B_id__c__pub_date=F('pub_date'))

Я не уверен на 100% в использовании заглавных букв в строке фильтра, но предикат F() - это то, что вы ищете. См. документы .

...