django - 3-я модель, все, с присоединением? - PullRequest
1 голос
/ 20 января 2010

У меня есть эти модели:

класс A (модель): передать

класс B (модель): the_a = ForeignKey (A)

класс C (модель): the_b = ForeignKey (B)

где-то в коде, у меня есть экземпляр А. Я знаю, как связать все B с A; A.b_set.all () - но есть ли способ связать все C со всеми B, связанными с моим A, без выполнения потенциально большого количества запросов?

Ответы [ 3 ]

2 голосов
/ 20 января 2010

Вы можете выполнить этот запрос, чтобы получить все C, связанные через B, с вашим A:

C.objects.filter(the_b__the_a=instance_of_a)

, где instance_of_a - это некоторый экземпляр класса A.

Для получения дополнительной информации см. http://docs.djangoproject.com/en/dev/topics/db/queries/#lookups-that-span-relationships

0 голосов
/ 20 января 2010

ОК, у меня должен быть RTM:

my_a = Некий экземпляр A

cs_for_my_a = C.objects.filter (the_b__the_a = my_a)

0 голосов
/ 20 января 2010

Это не дает прямого ответа на ваш вопрос, но это возможно в прямом SQL с одним запросом, поэтому это возможно в Django, но это зависит от того, как были написаны их обертки над SQL.

Пример:

SELECT C.* FROM B,C WHERE C.the_b = B.id AND B.the_a = ?

Где ? - идентификатор интересующего вас А.

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