diff options
| author | Piotr Jakimiak | 2014-09-05 11:08:34 +0200 | 
|---|---|---|
| committer | Piotr Jakimiak | 2014-09-05 11:08:34 +0200 | 
| commit | d9633c6817e4c4a3085398c8a52293011670ef46 (patch) | |
| tree | 9e70572b4a0793f01f06444b8a6cd9114d6bcc1e | |
| parent | 2e632e5af221e8f9a29ce03f817013f79172b687 (diff) | |
| download | django-rest-framework-d9633c6817e4c4a3085398c8a52293011670ef46.tar.bz2 | |
Fix returning None when allow_none is True in CharField
| -rw-r--r-- | rest_framework/fields.py | 8 | ||||
| -rw-r--r-- | tests/test_fields.py | 18 | 
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 | 
