diff options
author | Simon Charette <charette.s@gmail.com> | 2022-08-18 12:30:20 -0400 |
---|---|---|
committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2022-08-30 08:43:53 +0200 |
commit | b3db6c8dcb5145f7d45eff517bcd96460475c879 (patch) | |
tree | ca51349fab4db9de0f86dcb315c24caa02ae1e2a /django/db/models/query_utils.py | |
parent | 5d12650ed9269acb3cba97fd70e8df2e35a55a54 (diff) | |
download | django-b3db6c8dcb5145f7d45eff517bcd96460475c879.tar.gz |
Fixed #21204 -- Tracked field deferrals by field instead of models.
This ensures field deferral works properly when a model is involved
more than once in the same query with a distinct deferral mask.
Diffstat (limited to 'django/db/models/query_utils.py')
-rw-r--r-- | django/db/models/query_utils.py | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/django/db/models/query_utils.py b/django/db/models/query_utils.py index 6e82edb6e7..f4215ed48e 100644 --- a/django/db/models/query_utils.py +++ b/django/db/models/query_utils.py @@ -259,7 +259,7 @@ class RegisterLookupMixin: cls._clear_cached_lookups() -def select_related_descend(field, restricted, requested, load_fields, reverse=False): +def select_related_descend(field, restricted, requested, select_mask, reverse=False): """ Return True if this field should be used to descend deeper for select_related() purposes. Used by both the query construction code @@ -271,7 +271,7 @@ def select_related_descend(field, restricted, requested, load_fields, reverse=Fa * restricted - a boolean field, indicating if the field list has been manually restricted using a requested clause) * requested - The select_related() dictionary. - * load_fields - the set of fields to be loaded on this model + * select_mask - the dictionary of selected fields. * reverse - boolean, True if we are checking a reverse select related """ if not field.remote_field: @@ -287,9 +287,9 @@ def select_related_descend(field, restricted, requested, load_fields, reverse=Fa return False if ( restricted - and load_fields + and select_mask and field.name in requested - and field.attname not in load_fields + and field not in select_mask ): raise FieldError( f"Field {field.model._meta.object_name}.{field.name} cannot be both " |