From 3242df16e4e53afc58657cd7e01d0ba807e96288 Mon Sep 17 00:00:00 2001 From: Malcolm Tredinnick Date: Sun, 1 Mar 2009 04:12:30 +0000 Subject: [PATCH] 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 --- django/db/models/fields/__init__.py | 7 +++++-- django/db/models/fields/related.py | 7 +++++-- django/db/models/query.py | 7 ++----- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/django/db/models/fields/__init__.py b/django/db/models/fields/__init__.py index 41e8c06b80..b7438e02b2 100644 --- a/django/db/models/fields/__init__.py +++ b/django/db/models/fields/__init__.py @@ -193,12 +193,15 @@ class Field(object): 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'): diff --git a/django/db/models/fields/related.py b/django/db/models/fields/related.py index b763b05647..8f874bc7e0 100644 --- a/django/db/models/fields/related.py +++ b/django/db/models/fields/related.py @@ -140,12 +140,15 @@ class RelatedField(object): 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 diff --git a/django/db/models/query.py b/django/db/models/query.py index f9b5577891..1699991937 100644 --- a/django/db/models/query.py +++ b/django/db/models/query.py @@ -703,12 +703,9 @@ class QuerySet(object): 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 @@ class ValuesQuerySet(QuerySet): 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