diff options
| author | anna <annarschneider@gmail.com> | 2016-04-03 12:39:18 +0200 |
|---|---|---|
| committer | Markus Holtermann <info@markusholtermann.eu> | 2016-04-03 16:32:30 +0200 |
| commit | b28c60529bfa94702a50990fc2d40faa837fca9c (patch) | |
| tree | 33928b3fa7f3622ea2bccf032d3cda9ac9da7573 /django | |
| parent | 319b7112d8aa4a5fc38e9a8af2137d0074011439 (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.py | 28 |
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 |
