#324 Fix for blank=True not being respected on CharField

This commit is contained in:
Ian Strachan 2012-10-29 21:23:24 +00:00
parent cb899eb9a2
commit 28ba8586ab
3 changed files with 50 additions and 3 deletions

View File

@ -442,12 +442,23 @@ class CharField(WritableField):
def __init__(self, max_length=None, min_length=None, *args, **kwargs):
self.max_length, self.min_length = max_length, min_length
self.blank = kwargs.pop('blank', False)
super(CharField, self).__init__(*args, **kwargs)
if min_length is not None:
self.validators.append(validators.MinLengthValidator(min_length))
if max_length is not None:
self.validators.append(validators.MaxLengthValidator(max_length))
def validate(self, value):
"""
Validates that the value is supplied (if required).
"""
# if empty string and allow blank
if self.blank and not value:
return
else:
super(CharField, self).validate(value)
def from_native(self, value):
if isinstance(value, basestring) or value is None:
return value

View File

@ -420,6 +420,9 @@ class ModelSerializer(Serializer):
kwargs['choices'] = model_field.flatchoices
return ChoiceField(**kwargs)
if model_field.__class__ == models.TextField or model_field.__class__ == models.CharField:
kwargs['blank'] = model_field.blank
field_mapping = {
models.FloatField: FloatField,
models.IntegerField: IntegerField,

View File

@ -446,9 +446,42 @@ class BlankFieldTests(TestCase):
class Meta:
model = BlankFieldModel
self.serializer_class = BlankFieldModelSerializer
class BlankFieldSerializer(serializers.Serializer):
title = serializers.CharField(blank=True)
class NotBlankFieldModelSerializer(serializers.ModelSerializer):
class Meta:
model = BasicModel
class NotBlankFieldSerializer(serializers.Serializer):
title = serializers.CharField()
self.model_serializer_class = BlankFieldModelSerializer
self.serializer_class = BlankFieldSerializer
self.not_blank_model_serializer_class = NotBlankFieldModelSerializer
self.not_blank_serializer_class = NotBlankFieldSerializer
self.data = {'title': ''}
def test_create_blank_field(self):
data = {'title': ''}
serializer = self.serializer_class(data)
serializer = self.serializer_class(self.data)
self.assertEquals(serializer.is_valid(), True)
def test_create_model_blank_field(self):
serializer = self.model_serializer_class(self.data)
self.assertEquals(serializer.is_valid(), True)
def test_create_not_blank_field(self):
"""
Test to ensure blank data in a field not marked as blank=True
is considered invalid in a non-model serializer
"""
serializer = self.not_blank_serializer_class(self.data)
self.assertEquals(serializer.is_valid(), False)
def test_create_model_not_blank_field(self):
"""
Test to ensure blank data in a field not marked as blank=True
is considered invalid in a model serializer
"""
serializer = self.not_blank_model_serializer_class(self.data)
self.assertEquals(serializer.is_valid(), False)