#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.

Reply via email to