Opened 5 weeks ago

Closed 3 weeks ago

Last modified 3 weeks ago

#28723 closed Bug (fixed)

RelatedManager.get_prefetch_queryset returns "wrong" cache_name

Reported by: Mike Hansen Owned by: nobody
Component: Database layer (models, ORM) Version: master
Severity: Normal Keywords:
Cc: Triage Stage: Ready for checkin
Has patch: yes Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description (last modified by Mike Hansen)

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,

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

Change History (6)

comment:1 Changed 5 weeks ago by Mike Hansen

Has patch: set

A pull request for this can be found at https://github.com/django/django/pull/9259

I wasn't sure on the best location for these tests so any guidance would be helpful.

comment:2 Changed 5 weeks ago by Mike Hansen

Description: modified (diff)

comment:3 Changed 5 weeks ago by Mike Hansen

Description: modified (diff)
Type: UncategorizedBug

comment:4 Changed 3 weeks ago by Tim Graham

Triage Stage: UnreviewedReady for checkin

comment:5 Changed 3 weeks ago by Tim Graham <timograham@…>

Resolution: fixed
Status: newclosed

In 514b2c98:

Fixed #28723 -- Fixed RelatedManager's prefetch_related() cache name.

comment:6 Changed 3 weeks ago by Mike Hansen

Thanks Tim!

Note: See TracTickets for help on using tickets.
Back to Top