summaryrefslogtreecommitdiff
path: root/django
diff options
context:
space:
mode:
authorHasan Ramezani <hasan.r67@gmail.com>2019-12-05 09:54:27 +0100
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2019-12-05 15:50:39 +0100
commit5d674eac871a306405b0fbbaeb17bbeba9c68bf3 (patch)
tree39f827b82af94b862d9e373d30fef52226e4bcdb /django
parent664521c56aa72e7749292e4b8d92f093421463b5 (diff)
Fixed #31039 -- Added support for contained_by lookup with AutoFields, SmallIntegerField, and DecimalField.
Diffstat (limited to 'django')
-rw-r--r--django/contrib/postgres/fields/ranges.py9
1 files changed, 8 insertions, 1 deletions
diff --git a/django/contrib/postgres/fields/ranges.py b/django/contrib/postgres/fields/ranges.py
index b0b9275622..9a89fda02d 100644
--- a/django/contrib/postgres/fields/ranges.py
+++ b/django/contrib/postgres/fields/ranges.py
@@ -199,9 +199,11 @@ DateTimeRangeField.register_lookup(DateTimeRangeContains)
class RangeContainedBy(lookups.PostgresSimpleLookup):
lookup_name = 'contained_by'
type_mapping = {
+ 'smallint': 'int4range',
'integer': 'int4range',
'bigint': 'int8range',
'double precision': 'numrange',
+ 'numeric': 'numrange',
'date': 'daterange',
'timestamp with time zone': 'tstzrange',
}
@@ -209,13 +211,17 @@ class RangeContainedBy(lookups.PostgresSimpleLookup):
def process_rhs(self, compiler, connection):
rhs, rhs_params = super().process_rhs(compiler, connection)
- cast_type = self.type_mapping[self.lhs.output_field.db_type(connection)]
+ # Ignore precision for DecimalFields.
+ db_type = self.lhs.output_field.cast_db_type(connection).split('(')[0]
+ cast_type = self.type_mapping[db_type]
return '%s::%s' % (rhs, cast_type), rhs_params
def process_lhs(self, compiler, connection):
lhs, lhs_params = super().process_lhs(compiler, connection)
if isinstance(self.lhs.output_field, models.FloatField):
lhs = '%s::numeric' % lhs
+ elif isinstance(self.lhs.output_field, models.SmallIntegerField):
+ lhs = '%s::integer' % lhs
return lhs, lhs_params
def get_prep_lookup(self):
@@ -226,6 +232,7 @@ models.DateField.register_lookup(RangeContainedBy)
models.DateTimeField.register_lookup(RangeContainedBy)
models.IntegerField.register_lookup(RangeContainedBy)
models.FloatField.register_lookup(RangeContainedBy)
+models.DecimalField.register_lookup(RangeContainedBy)
@RangeField.register_lookup