mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-07-03 20:03:35 +03:00
#324 Fix for blank=True not being respected on CharField
This commit is contained in:
parent
cb899eb9a2
commit
28ba8586ab
|
@ -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
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue
Block a user