Commit fe3b75e2 authored by Russell Keith-Magee's avatar Russell Keith-Magee
Browse files

[1.1.X] Fixed #12851 -- Another attempt at fixing select_related() with...

[1.1.X] Fixed #12851 -- Another attempt at fixing select_related() with inherited models, this time with only(). Thanks to phxx for the test case.

Backport of r13059 from trunk.

git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.1.X@13060 bcc190cf-cafb-0310-a4f2-bffc1f526a37
parent 868acb3a
Loading
Loading
Loading
Loading
+11 −1
Original line number Diff line number Diff line
@@ -970,7 +970,17 @@ def get_cached_row(klass, row, index_start, 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()
+2 −2
Original line number Diff line number Diff line
@@ -621,10 +621,10 @@ class BaseQuery(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
+9 −0
Original line number Diff line number Diff line
@@ -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'

"""}