Во-первых, ваше утверждение неверно: 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 *