Джанго - получение внешнего ключа - PullRequest
0 голосов
/ 13 ноября 2011

Модель A имеет ForeignKey для модели B - я хотел бы получить A экземпляров и сравнить их друг с другом, где ключ к B является одним из параметров сравнения.

Django откладывает извлечение B связанной информации, поэтому, если я хочу оптимизировать свой код и забрать заранее необходимую информацию, я могу сделать одно из следующих действий:

  • Использовать .select_related('B') -который выберет все связанные B экземпляры
  • Use .select_related('B__id') - который выберет только идентификаторы всех связанных B экземпляров

AFAIK оба требуют объединения, где всеМне действительно был нужен A.B_id, который является столбцом в базе данных, так как это все, что я хотел сравнить.

Я что-то упускаю прямо здесь? Чего мне здесь не хватает?Могу ли я получить A.B_id напрямую?

1 Ответ

1 голос
/ 13 ноября 2011

Во-первых, ваше утверждение неверно: select_related('B__id') ничего не делает.Двойное подчеркивание в вызове select_related предназначено только для следующих последующих объединений: поэтому, если бы B имел ForeignKey для C, select_related('B__C') также следовал бы за вторым JOIN.

Во-вторых, я запутался в вашей оптимизациитребование.Как вы говорите, вы просто хотите B_id: поэтому не требуется JOIN, и при этом не требуется никакой оптимизации.Если вы просто получаете ваши объекты A обычным способом, вы можете обратиться к полю b_id каждого из них напрямую:

a_objects = A.objects.all()
for obj in a_objects:
    print a.b_id

Здесь выполняется только один вызов БД, без JOIN.1010 *

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