diff options
| author | Hasan Ramezani <hasan.r67@gmail.com> | 2019-12-05 09:54:27 +0100 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2019-12-05 15:50:39 +0100 |
| commit | 5d674eac871a306405b0fbbaeb17bbeba9c68bf3 (patch) | |
| tree | 39f827b82af94b862d9e373d30fef52226e4bcdb /django | |
| parent | 664521c56aa72e7749292e4b8d92f093421463b5 (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.py | 9 |
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 |
