#32281: Prefetech Object - to_attr has ambiguous behavior when using a related
lookup
-----------------------------------------+------------------------
Reporter: talolard | Owner: nobody
Type: Uncategorized | Status: new
Component: Uncategorized | Version: 3.1
Severity: Normal | Keywords:
Triage Stage: Unreviewed | Has patch: 0
Needs documentation: 0 | Needs tests: 0
Patch needs improvement: 0 | Easy pickings: 0
UI/UX: 0 |
-----------------------------------------+------------------------
**Code Example**
{{{
from django.db.models import Prefetch
p = Prefetch("a_set", to_attr="my_a")
assert p.prefetch_to == "my_a"
p = Prefetch("b__a_set", to_attr="my_a")
assert p.prefetch_to == "my_a", p.prefetch_to
}}}
That last assertion fails because p.prefetch_to == "b__my_a"
**Description and use case**
We have a models X, Y and Z
Z has a foreign key to Y and Y has a foreign key to Z
We'd like to fetch X with all of it's Z's using prefetch related and to be
able to set the attribute to "z"
But as above, this doesn't seem to work.
The
[https://github.com/django/django/blob/bb64b99b78a579cb2f6178011a4cf9366e634438/django/db/models/query.py#L1570-L1587
relevant Django code] seems to ignore this use case (or discourage it?)
and instead puts to "z" attribute on each "Y"
{{{
self.prefetch_to =
LOOKUP_SEP.join(lookup.split(LOOKUP_SEP)[:-1] + [to_attr])
}}}
----
I assume "fixing this" is a breaking change, but could we do an explicit
parameter for prefetch_to ?At the moment we're setting it manually after
creating the prefetch object
--
Ticket URL: <https://code.djangoproject.com/ticket/32281>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/051.d6b5ff5402089001d76cf962f6a3bca1%40djangoproject.com.