summaryrefslogtreecommitdiff
path: root/django
diff options
context:
space:
mode:
authoranna <annarschneider@gmail.com>2016-04-03 12:39:18 +0200
committerMarkus Holtermann <info@markusholtermann.eu>2016-04-03 16:32:30 +0200
commitb28c60529bfa94702a50990fc2d40faa837fca9c (patch)
tree33928b3fa7f3622ea2bccf032d3cda9ac9da7573 /django
parent319b7112d8aa4a5fc38e9a8af2137d0074011439 (diff)
Fixed #26101 -- Allowed introspection of base_field.model in RangeField
Used the same test and fix as in #25867. This required initializing base_field in RangeField.__init__, not when setting the attribute.
Diffstat (limited to 'django')
-rw-r--r--django/contrib/postgres/fields/ranges.py28
1 files changed, 23 insertions, 5 deletions
diff --git a/django/contrib/postgres/fields/ranges.py b/django/contrib/postgres/fields/ranges.py
index 5bce0743f0..3816de84f1 100644
--- a/django/contrib/postgres/fields/ranges.py
+++ b/django/contrib/postgres/fields/ranges.py
@@ -17,6 +17,24 @@ __all__ = [
class RangeField(models.Field):
empty_strings_allowed = False
+ def __init__(self, *args, **kwargs):
+ # Initializing base_field here ensures that its model matches the model for self.
+ if hasattr(self, 'base_field'):
+ self.base_field = self.base_field()
+ super(RangeField, self).__init__(*args, **kwargs)
+
+ @property
+ def model(self):
+ try:
+ return self.__dict__['model']
+ except KeyError:
+ raise AttributeError("'%s' object has no attribute 'model'" % self.__class__.__name__)
+
+ @model.setter
+ def model(self, model):
+ self.__dict__['model'] = model
+ self.base_field.model = model
+
def get_prep_value(self, value):
if value is None:
return None
@@ -65,7 +83,7 @@ class RangeField(models.Field):
class IntegerRangeField(RangeField):
- base_field = models.IntegerField()
+ base_field = models.IntegerField
range_type = NumericRange
form_field = forms.IntegerRangeField
@@ -74,7 +92,7 @@ class IntegerRangeField(RangeField):
class BigIntegerRangeField(RangeField):
- base_field = models.BigIntegerField()
+ base_field = models.BigIntegerField
range_type = NumericRange
form_field = forms.IntegerRangeField
@@ -83,7 +101,7 @@ class BigIntegerRangeField(RangeField):
class FloatRangeField(RangeField):
- base_field = models.FloatField()
+ base_field = models.FloatField
range_type = NumericRange
form_field = forms.FloatRangeField
@@ -92,7 +110,7 @@ class FloatRangeField(RangeField):
class DateTimeRangeField(RangeField):
- base_field = models.DateTimeField()
+ base_field = models.DateTimeField
range_type = DateTimeTZRange
form_field = forms.DateTimeRangeField
@@ -101,7 +119,7 @@ class DateTimeRangeField(RangeField):
class DateRangeField(RangeField):
- base_field = models.DateField()
+ base_field = models.DateField
range_type = DateRange
form_field = forms.DateRangeField