Fixed #12851 -- Another attempt at fixing select_related() with inherited models, this time with only(). Thanks to phxx for the test case.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@13059 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
21d98c5ebd
commit
8b1aebbf35
|
@ -1154,7 +1154,17 @@ def get_cached_row(klass, row, index_start, using, max_depth=0, cur_depth=0,
|
|||
return None
|
||||
|
||||
restricted = requested is not None
|
||||
load_fields = only_load and only_load.get(klass) or None
|
||||
if only_load:
|
||||
load_fields = only_load.get(klass)
|
||||
# When we create the object, we will also be creating populating
|
||||
# all the parent classes, so traverse the parent classes looking
|
||||
# for fields that must be included on load.
|
||||
for parent in klass._meta.get_parent_list():
|
||||
fields = only_load.get(parent)
|
||||
if fields:
|
||||
load_fields.update(fields)
|
||||
else:
|
||||
load_fields = None
|
||||
if load_fields:
|
||||
# Handle deferred fields.
|
||||
skip = set()
|
||||
|
|
|
@ -556,10 +556,10 @@ class Query(object):
|
|||
# models.
|
||||
workset = {}
|
||||
for model, values in seen.iteritems():
|
||||
for field in model._meta.fields:
|
||||
for field, m in model._meta.get_fields_with_model():
|
||||
if field in values:
|
||||
continue
|
||||
add_to_dict(workset, model, field)
|
||||
add_to_dict(workset, m or model, field)
|
||||
for model, values in must_include.iteritems():
|
||||
# If we haven't included a model in workset, we don't add the
|
||||
# corresponding must_include fields for that model, since an
|
||||
|
|
|
@ -197,4 +197,13 @@ u'Troy Buswell'
|
|||
>>> troy.state.name
|
||||
u'Western Australia'
|
||||
|
||||
# Also works if you use only, rather than defer
|
||||
>>> troy = SpecialClient.objects.select_related('state').only('name').get(name='Troy Buswell')
|
||||
>>> troy.name
|
||||
u'Troy Buswell'
|
||||
>>> troy.value
|
||||
42
|
||||
>>> troy.state.name
|
||||
u'Western Australia'
|
||||
|
||||
"""}
|
||||
|
|
Loading…
Reference in New Issue