1
0
mirror of https://github.com/django/django.git synced 2025-10-24 06:06:09 +00:00

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.
This commit is contained in:
anna
2016-04-03 12:39:18 +02:00
committed by Markus Holtermann
parent 319b7112d8
commit b28c60529b
4 changed files with 36 additions and 6 deletions

View File

@@ -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