diff options
Diffstat (limited to 'django/db/models/sql')
| -rw-r--r-- | django/db/models/sql/datastructures.py | 3 | ||||
| -rw-r--r-- | django/db/models/sql/query.py | 29 |
2 files changed, 16 insertions, 16 deletions
diff --git a/django/db/models/sql/datastructures.py b/django/db/models/sql/datastructures.py index 421c3cd860..634edf2477 100644 --- a/django/db/models/sql/datastructures.py +++ b/django/db/models/sql/datastructures.py @@ -24,6 +24,9 @@ class Col(object): def get_lookup(self, name): return self.output_type.get_lookup(name) + def get_transform(self, name): + return self.output_type.get_transform(name) + def prepare(self): return self diff --git a/django/db/models/sql/query.py b/django/db/models/sql/query.py index 7bfdceb183..25ebe5598e 100644 --- a/django/db/models/sql/query.py +++ b/django/db/models/sql/query.py @@ -1088,24 +1088,21 @@ class Query(object): lookups = lookups[:] while lookups: lookup = lookups[0] - next = lhs.get_lookup(lookup) + if len(lookups) == 1: + final_lookup = lhs.get_lookup(lookup) + if final_lookup: + return final_lookup(lhs, rhs) + # We didn't find a lookup, so we are going to try get_transform + # + get_lookup('exact'). + lookups.append('exact') + next = lhs.get_transform(lookup) if next: - if len(lookups) == 1: - # This was the last lookup, so return value lookup. - if issubclass(next, Transform): - lookups.append('exact') - lhs = next(lhs, lookups) - else: - return next(lhs, rhs) - else: - lhs = next(lhs, lookups) - # A field's get_lookup() can return None to opt for backwards - # compatibility path. - elif len(lookups) > 2: - raise FieldError( - "Unsupported lookup for field '%s'" % lhs.output_type.name) + lhs = next(lhs, lookups) else: - return None + raise FieldError( + "Unsupported lookup '%s' for %s or join on the field not " + "permitted." % + (lookup, lhs.output_type.__class__.__name__)) lookups = lookups[1:] def build_filter(self, filter_expr, branch_negated=False, current_negated=False, |
