diff options
| author | Adam Chainz <adam@adamj.eu> | 2015-08-15 13:41:57 +0100 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2016-02-26 14:55:01 -0500 |
| commit | ef33bc2d4d5e66b08cba2a318aa700ba1e28ba81 (patch) | |
| tree | c84884ab3751d48c411f07fa53c96cfc32d8d6a8 /django/db | |
| parent | d5f89ff6e873dbb2890ed05ce2aeae628792c8f7 (diff) | |
Fixed #25279 -- Made prefetch_related_objects() public.
Diffstat (limited to 'django/db')
| -rw-r--r-- | django/db/models/__init__.py | 4 | ||||
| -rw-r--r-- | django/db/models/query.py | 15 |
2 files changed, 9 insertions, 10 deletions
diff --git a/django/db/models/__init__.py b/django/db/models/__init__.py index 5629f46277..8deb9cfaa8 100644 --- a/django/db/models/__init__.py +++ b/django/db/models/__init__.py @@ -14,7 +14,9 @@ from django.db.models.fields.files import FileField, ImageField # NOQA from django.db.models.fields.proxy import OrderWrt # NOQA from django.db.models.lookups import Lookup, Transform # NOQA from django.db.models.manager import Manager # NOQA -from django.db.models.query import Q, Prefetch, QuerySet # NOQA +from django.db.models.query import ( # NOQA + Q, Prefetch, QuerySet, prefetch_related_objects, +) # Imports that would create circular imports if sorted from django.db.models.base import Model # NOQA isort:skip diff --git a/django/db/models/query.py b/django/db/models/query.py index f37ed0f1b6..82074d700b 100644 --- a/django/db/models/query.py +++ b/django/db/models/query.py @@ -654,7 +654,7 @@ class QuerySet(object): def _prefetch_related_objects(self): # This method can only be called once the result cache has been filled. - prefetch_related_objects(self._result_cache, self._prefetch_related_lookups) + prefetch_related_objects(self._result_cache, *self._prefetch_related_lookups) self._prefetch_done = True ################################################## @@ -1368,15 +1368,12 @@ def normalize_prefetch_lookups(lookups, prefix=None): return ret -def prefetch_related_objects(result_cache, related_lookups): +def prefetch_related_objects(model_instances, *related_lookups): """ - Helper function for prefetch_related functionality - - Populates prefetched objects caches for a list of results - from a QuerySet + Populate prefetched object caches for a list of model instances based on + the lookups/Prefetch instances given. """ - - if len(result_cache) == 0: + if len(model_instances) == 0: return # nothing to do related_lookups = normalize_prefetch_lookups(related_lookups) @@ -1401,7 +1398,7 @@ def prefetch_related_objects(result_cache, related_lookups): # Top level, the list of objects to decorate is the result cache # from the primary QuerySet. It won't be for deeper levels. - obj_list = result_cache + obj_list = model_instances through_attrs = lookup.prefetch_through.split(LOOKUP_SEP) for level, through_attr in enumerate(through_attrs): |
