Прежде всего, на основе описанных вами отношений, объект Prefetch
должен быть сконструирован следующим образом (если вы не определили related_name
для отношений, в этом случае вам нужно связанное имя без добавления _set
):
Prefetch('model_b_set__model_c_set')
Во-вторых, вы фактически делаете две предварительные выборки:
- Первая выбирает все
model_b
экземпляров для каждого model_a
. - Второй извлекает все
model_c
экземпляров для каждого model_b
.
data
определен для второй предварительной выборки, т.е.на model_b
экземплярах, а не на model_a
, и он будет содержать список model_c
экземпляров.Таким образом, вы получите к нему доступ так:
a_models = ModelA.objects.prefetch_related(
Prefetch('model_b_set__model_c_set'),
to_attr='data')
for a in a_models:
for b in a.model_b_set.all():
b.data # => contains a list of model_c instances