Permalink
Browse files

To avoid an unfortunately common user-error, rename QuerySet.as_sql().

This was never a public API method, so this is backwards compatible, unless
you're poking at the internals. Refs #10352.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@9928 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information...
1 parent c6a404d commit 3242df16e4e53afc58657cd7e01d0ba807e96288 @malcolmt malcolmt committed Mar 1, 2009
Showing with 12 additions and 9 deletions.
  1. +5 −2 django/db/models/fields/__init__.py
  2. +5 −2 django/db/models/fields/related.py
  3. +2 −5 django/db/models/query.py
View
7 django/db/models/fields/__init__.py
@@ -193,12 +193,15 @@ def get_db_prep_save(self, value):
def get_db_prep_lookup(self, lookup_type, value):
"Returns field's value prepared for database lookup."
- if hasattr(value, 'as_sql'):
+ if hasattr(value, 'as_sql') or hasattr(value, '_as_sql'):
# If the value has a relabel_aliases method, it will need to
# be invoked before the final SQL is evaluated
if hasattr(value, 'relabel_aliases'):
return value
- sql, params = value.as_sql()
+ try:
+ sql, params = value.as_sql()
+ except AttributeError:
+ sql, params = value._as_sql()
return QueryWrapper(('(%s)' % sql), params)
if lookup_type in ('regex', 'iregex', 'month', 'day', 'week_day', 'search'):
View
7 django/db/models/fields/related.py
@@ -140,12 +140,15 @@ def pk_trace(value):
v = v[0]
return v
- if hasattr(value, 'as_sql'):
+ if hasattr(value, 'as_sql') or hasattr(value, '_as_sql'):
# If the value has a relabel_aliases method, it will need to
# be invoked before the final SQL is evaluated
if hasattr(value, 'relabel_aliases'):
return value
- sql, params = value.as_sql()
+ try:
+ sql, params = value.as_sql()
+ except AttributeError:
+ sql, params = value._as_sql()
return QueryWrapper(('(%s)' % sql), params)
# FIXME: lt and gt are explicitally allowed to make
View
7 django/db/models/query.py
@@ -703,12 +703,9 @@ def _setup_aggregate_query(self, aggregates):
self.query.add_fields(field_names, False)
self.query.set_group_by()
- def as_sql(self):
+ def _as_sql(self):
"""
Returns the internal query's SQL and parameters (as a tuple).
-
- This is a private (internal) method. The name is chosen to provide
- uniformity with other interfaces (in particular, the Query class).
"""
obj = self.values("pk")
return obj.query.as_nested_sql()
@@ -812,7 +809,7 @@ def _setup_aggregate_query(self, aggregates):
super(ValuesQuerySet, self)._setup_aggregate_query(aggregates)
- def as_sql(self):
+ def _as_sql(self):
"""
For ValueQuerySet (and subclasses like ValuesListQuerySet), they can
only be used as nested queries if they're already set up to select only

0 comments on commit 3242df1

Please sign in to comment.