From bef4ca2bacfefd22fdf35b9c86d3ab714c67330f Mon Sep 17 00:00:00 2001 From: Malcolm Tredinnick Date: Thu, 29 Nov 2007 22:07:58 +0000 Subject: [PATCH] queryset-refactor: Fixed an off-by-one error when filling the select-related case. Only affects people using select_related() with the "depth" parameter *and* extra(select=...) simultaneously. Refs #6018. Thanks, Matthias Urlichs. git-svn-id: http://code.djangoproject.com/svn/django/branches/queryset-refactor@6755 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- django/db/models/sql/query.py | 7 +++++-- tests/modeltests/select_related/models.py | 4 ++++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/django/db/models/sql/query.py b/django/db/models/sql/query.py index 9f303fa015..c1013ce99f 100644 --- a/django/db/models/sql/query.py +++ b/django/db/models/sql/query.py @@ -634,10 +634,13 @@ class Query(object): self.rev_join_map[alias] = t_ident return alias - def fill_related_selections(self, opts=None, root_alias=None, cur_depth=0, + def fill_related_selections(self, opts=None, root_alias=None, cur_depth=1, used=None): """ - Fill in the information needed for a select_related query. + Fill in the information needed for a select_related query. The current + "depth" is measured as the number of connections away from the root + model (cur_depth == 1 means we are looking at models with direct + connections to the root model). """ if self.max_depth and cur_depth > self.max_depth: # We've recursed too deeply; bail out. diff --git a/tests/modeltests/select_related/models.py b/tests/modeltests/select_related/models.py index 78ba0ba764..a52cc986a4 100644 --- a/tests/modeltests/select_related/models.py +++ b/tests/modeltests/select_related/models.py @@ -147,6 +147,10 @@ __test__ = {'API_TESTS':""" >>> len(db.connection.queries) 5 +>>> s = Species.objects.all().select_related(depth=1).extra(select={'a': 'select_related_species.id + 10'})[0] +>>> s.id + 10 == s.a +True + # Reset DEBUG to where we found it. >>> settings.DEBUG = False """}