From 4d00ac86eea3c4df7b11a9ca195ea69426e70f6a Mon Sep 17 00:00:00 2001 From: Russell Keith-Magee Date: Sat, 20 Mar 2010 15:42:18 +0000 Subject: [PATCH] [1.1.X] Fixed #12851 -- Corrected the interaction of defer() with select_related(). Thanks to ruosteinen for the report. Backport of r12817 from trunk. git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.1.X@12818 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- django/db/models/query.py | 2 +- tests/regressiontests/defer_regress/models.py | 2 +- tests/regressiontests/select_related_regress/models.py | 9 +++++++++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/django/db/models/query.py b/django/db/models/query.py index 9c3cf48e88..e021fd317e 100644 --- a/django/db/models/query.py +++ b/django/db/models/query.py @@ -996,7 +996,7 @@ def get_cached_row(klass, row, index_start, max_depth=0, cur_depth=0, else: next = None cached_row = get_cached_row(f.rel.to, row, index_end, max_depth, - cur_depth+1, next) + cur_depth+1, next, only_load=only_load) if cached_row: rel_obj, index_end = cached_row if obj is not None: diff --git a/tests/regressiontests/defer_regress/models.py b/tests/regressiontests/defer_regress/models.py index c0e361b911..636f41050f 100644 --- a/tests/regressiontests/defer_regress/models.py +++ b/tests/regressiontests/defer_regress/models.py @@ -143,7 +143,7 @@ False [, , , ] >>> sorted(get_models(models.get_app('defer_regress'), include_deferred=True), key=lambda obj: obj._meta.object_name) -[, , , , , , , , , , , , , , ] +[, , , , , , , , , , , , , , , ] """ } diff --git a/tests/regressiontests/select_related_regress/models.py b/tests/regressiontests/select_related_regress/models.py index b2664f9398..9eaf934777 100644 --- a/tests/regressiontests/select_related_regress/models.py +++ b/tests/regressiontests/select_related_regress/models.py @@ -165,4 +165,13 @@ Exercising select_related() with multi-table model inheritance. >>> Item.objects.select_related("child").order_by("name") [, ] +# Regression for #12851 - Deferred fields are used correctly if you +# select_related a subset of fields. +>>> wa = State.objects.create(name="Western Australia", country=australia) +>>> _ = Client.objects.create(name='Brian Burke', state=wa, status=active) +>>> burke = Client.objects.select_related('state').defer('state__name').get(name='Brian Burke') +>>> burke.state.name +u'Western Australia' + """} +