IntegerField to_representation can handle integer like strings with a decimal value of zero e.g. '1.0'

This commit is contained in:
Ryan Allen 2015-04-23 19:51:29 -05:00
parent cbea03c85b
commit f7da76bd60
2 changed files with 8 additions and 13 deletions

View File

@ -678,18 +678,21 @@ class IntegerField(Field):
message = self.error_messages['min_value'].format(min_value=self.min_value) message = self.error_messages['min_value'].format(min_value=self.min_value)
self.validators.append(MinValueValidator(self.min_value, message=message)) self.validators.append(MinValueValidator(self.min_value, message=message))
def coerce_to_int(self, value):
return int(self.re_decimal.sub('', str(value)))
def to_internal_value(self, data): def to_internal_value(self, data):
if isinstance(data, six.text_type) and len(data) > self.MAX_STRING_LENGTH: if isinstance(data, six.text_type) and len(data) > self.MAX_STRING_LENGTH:
self.fail('max_string_length') self.fail('max_string_length')
try: try:
data = int(self.re_decimal.sub('', str(data))) data = self.coerce_to_int(data)
except (ValueError, TypeError): except (ValueError, TypeError):
self.fail('invalid') self.fail('invalid')
return data return data
def to_representation(self, value): def to_representation(self, value):
return int(value) return self.coerce_to_int(value)
class FloatField(Field): class FloatField(Field):
@ -925,9 +928,6 @@ class DateField(Field):
self.fail('invalid', format=humanized_format) self.fail('invalid', format=humanized_format)
def to_representation(self, value): def to_representation(self, value):
if not value:
return None
if self.format is None: if self.format is None:
return value return value
@ -941,10 +941,7 @@ class DateField(Field):
) )
if self.format.lower() == ISO_8601: if self.format.lower() == ISO_8601:
if (isinstance(value, str)):
value = datetime.datetime.strptime(value, '%Y-%m-%d').date()
return value.isoformat() return value.isoformat()
return value.strftime(self.format) return value.strftime(self.format)

View File

@ -563,7 +563,8 @@ class TestIntegerField(FieldValues):
1: 1, 1: 1,
0: 0, 0: 0,
1.0: 1, 1.0: 1,
0.0: 0 0.0: 0,
'1.0': 1
} }
field = serializers.IntegerField() field = serializers.IntegerField()
@ -726,10 +727,7 @@ class TestDateField(FieldValues):
datetime.datetime(2001, 1, 1, 12, 00): ['Expected a date but got a datetime.'], datetime.datetime(2001, 1, 1, 12, 00): ['Expected a date but got a datetime.'],
} }
outputs = { outputs = {
datetime.date(2001, 1, 1): '2001-01-01', datetime.date(2001, 1, 1): '2001-01-01'
'2001-01-01': '2001-01-01',
None: None,
'': None,
} }
field = serializers.DateField() field = serializers.DateField()