aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPiotr Jakimiak2014-09-05 11:08:34 +0200
committerPiotr Jakimiak2014-09-05 11:08:34 +0200
commitd9633c6817e4c4a3085398c8a52293011670ef46 (patch)
tree9e70572b4a0793f01f06444b8a6cd9114d6bcc1e
parent2e632e5af221e8f9a29ce03f817013f79172b687 (diff)
downloaddjango-rest-framework-d9633c6817e4c4a3085398c8a52293011670ef46.tar.bz2
Fix returning None when allow_none is True in CharField
-rw-r--r--rest_framework/fields.py8
-rw-r--r--tests/test_fields.py18
2 files changed, 24 insertions, 2 deletions
diff --git a/rest_framework/fields.py b/rest_framework/fields.py
index 9d707c9b..5955fa3f 100644
--- a/rest_framework/fields.py
+++ b/rest_framework/fields.py
@@ -475,8 +475,12 @@ class CharField(WritableField):
if isinstance(value, six.string_types):
return value
- if value is None and not self.allow_none:
- return ''
+ if value is None:
+ if not self.allow_none:
+ return ''
+ else:
+ # return None implicity because smart_text(None) == 'None'
+ return None
return smart_text(value)
diff --git a/tests/test_fields.py b/tests/test_fields.py
index 094ac1eb..b8c9954e 100644
--- a/tests/test_fields.py
+++ b/tests/test_fields.py
@@ -54,6 +54,10 @@ class ChoiceFieldModel(models.Model):
choice = models.CharField(choices=SAMPLE_CHOICES, blank=True, max_length=255)
+class NullableCharFieldModel(models.Model):
+ char = models.CharField(null=True, blank=True, max_length=4)
+
+
class ChoiceFieldModelSerializer(serializers.ModelSerializer):
class Meta:
model = ChoiceFieldModel
@@ -1004,6 +1008,20 @@ class BooleanField(TestCase):
self.assertFalse(BooleanRequiredSerializer(data={}).is_valid())
+class ModelCharField(TestCase):
+ """
+ Tests for CharField
+ """
+ def test_none_serializing(self):
+ class CharFieldSerializer(serializers.ModelSerializer):
+ class Meta:
+ model = NullableCharFieldModel
+ serializer = CharFieldSerializer(data={'char': None})
+ self.assertTrue(serializer.fields['char'].allow_none)
+ self.assertTrue(serializer.is_valid())
+ self.assertIsNone(serializer.data['char'])
+
+
class SerializerMethodFieldTest(TestCase):
"""
Tests for the SerializerMethodField field_to_native() behavior