#28723: RelatedManager.get_prefetch_queryset returns "wrong" cache_name -------------------------------------+------------------------------------- Reporter: Mike Hansen | Owner: nobody Type: Bug | Status: new Component: Database layer | Version: master (models, ORM) | Severity: Normal | Resolution: Keywords: | Triage Stage: | Unreviewed Has patch: 1 | Needs documentation: 0 Needs tests: 0 | Patch needs improvement: 0 Easy pickings: 0 | UI/UX: 0 -------------------------------------+------------------------------------- Changes (by Mike Hansen):
* type: Uncategorized => Bug Old description: > Currently, `RelatedManager.get_prefetch_queryset` returns > `self.field.related_query_name()` as the `cache_name`. In the case where > no `related_name` has been set on the `ForeignKey`, then this does not > match with the `through_attr` used by `get_prefetcher`. > > Using the models in `tests/prefetch_related/models.py`, > > {{{#!python > BookWithYear.objects.prefetch_related('bookreview_set') > }}} > will use a `through_attr` of `"bookreview_set"`, but `"bookreview"` is > what will be placed in `_prefetched_objects_cache`. > > I think `related_manager.field.remote_field.get_accessor_name()` should > be used instead. > > I'll post a patch fixing this and adding a test case. New description: Currently, `RelatedManager.get_prefetch_queryset` returns `self.field.related_query_name()` as the `cache_name`. In the case where no `related_name` has been set on the `ForeignKey`, then this does not match with the `through_attr` used by `get_prefetcher`. Using the models in `tests/prefetch_related/models.py`, {{{#!python BookWithYear.objects.prefetch_related('bookreview_set') }}} will use a `through_attr` of `"bookreview_set"`, but `"bookreview"` is what will be placed in `_prefetched_objects_cache`. I think `related_manager.field.remote_field.get_accessor_name()` should be used instead. https://github.com/django/django/pull/9259 is a pull request which fixes this issue -- -- Ticket URL: <https://code.djangoproject.com/ticket/28723#comment:3> 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 django-updates+unsubscr...@googlegroups.com. To post to this group, send email to django-updates@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/django-updates/066.b78d86a9724e6e205f969657f2e67f25%40djangoproject.com. For more options, visit https://groups.google.com/d/optout.