{{{
ParentModel.objects.prefetch_related('child_model').only('parent_attribute',
'childs__child_atrtibute').all()
}}}
I guess it is not really a bug, as using `only()` and `defer()` in
combination with `prefetch_related()` is not documented (documentation
only mentions the use of `select_related()` with `defer()`).
But it could be a useful feature: is there a reason to support
`select_related()` but not `prefetch_related()`?
I hope that an improvement of the patch for #14694 can enable this
feature.
P.S. I wasn't able to fix it by myself, due to my lack of understanding of
how `django.db.models.sql.query.deferred_to_data()` works. Simply removing
`and field.field.unique` in `django.db.models.sql.query.is_reverse_o2o()`
makes the error message disappear, but the instructions in `only()` remain
ignored.
--
Ticket URL: <https://code.djangoproject.com/ticket/20923>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
* needs_better_patch: => 0
* needs_tests: => 0
* needs_docs: => 0
--
Ticket URL: <https://code.djangoproject.com/ticket/20923#comment:1>
* cc: as@… (added)
Comment:
I registered to follow this ticket.
--
Ticket URL: <https://code.djangoproject.com/ticket/20923#comment:2>
Comment (by akaariai):
I think a better way is to add custom query support to prefetch_related
(or, #17001). Main reason is that I believe implementation of
communicating the only/defer data from the main query to the prefetch
queries will be hard to do cleanly.
--
Ticket URL: <https://code.djangoproject.com/ticket/20923#comment:3>
* status: new => closed
* resolution: => wontfix
Comment:
Forgot to wontfix this...
--
Ticket URL: <https://code.djangoproject.com/ticket/20923#comment:4>
Comment (by alexpirine):
Replying to [comment:3 akaariai]:
> I think a better way is to add custom query support to prefetch_related
(or, #17001). Main reason is that I believe implementation of
communicating the only/defer data from the main query to the prefetch
queries will be hard to do cleanly.
Thanks, it looks interesting. If I understood it correctly, I could pass
the only() attribute to the custom queryset:
{{{
ParentModel.objects.prefetch_related(
R('child_model', to_attr = 'childs', qs =
ChildModel.objects.only('child_attribute')
).only('parent_attribute').all()
}}}
which would answer this issue.
--
Ticket URL: <https://code.djangoproject.com/ticket/20923#comment:5>