diff options
Diffstat (limited to 'rest_framework')
| -rw-r--r-- | rest_framework/fields.py | 3 | ||||
| -rw-r--r-- | rest_framework/serializers.py | 2 | ||||
| -rw-r--r-- | rest_framework/tests/test_serializer.py | 3 | ||||
| -rw-r--r-- | rest_framework/tests/test_serializer_empty.py | 15 | 
4 files changed, 21 insertions, 2 deletions
diff --git a/rest_framework/fields.py b/rest_framework/fields.py index 16344d01..6b039f6c 100644 --- a/rest_framework/fields.py +++ b/rest_framework/fields.py @@ -777,6 +777,7 @@ class IntegerField(WritableField):      type_name = 'IntegerField'      type_label = 'integer'      form_field_class = forms.IntegerField +    empty = 0      default_error_messages = {          'invalid': _('Enter a whole number.'), @@ -808,6 +809,7 @@ class FloatField(WritableField):      type_name = 'FloatField'      type_label = 'float'      form_field_class = forms.FloatField +    empty = 0      default_error_messages = {          'invalid': _("'%s' value must be a float."), @@ -828,6 +830,7 @@ class DecimalField(WritableField):      type_name = 'DecimalField'      type_label = 'decimal'      form_field_class = forms.DecimalField +    empty = Decimal('0')      default_error_messages = {          'invalid': _('Enter a number.'), diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py index bc9f73d1..8e945688 100644 --- a/rest_framework/serializers.py +++ b/rest_framework/serializers.py @@ -310,6 +310,8 @@ class BaseSerializer(WritableField):          ret.fields = self._dict_class()          for field_name, field in self.fields.items(): +            if field.read_only and obj is None: +               continue              field.initialize(parent=self, field_name=field_name)              key = self.get_field_key(field_name)              value = field.field_to_native(obj, field_name) diff --git a/rest_framework/tests/test_serializer.py b/rest_framework/tests/test_serializer.py index 8d246b01..d4e5a93f 100644 --- a/rest_framework/tests/test_serializer.py +++ b/rest_framework/tests/test_serializer.py @@ -159,8 +159,7 @@ class BasicTests(TestCase):          expected = {              'email': '',              'content': '', -            'created': None, -            'sub_comment': '' +            'created': None          }          self.assertEqual(serializer.data, expected) diff --git a/rest_framework/tests/test_serializer_empty.py b/rest_framework/tests/test_serializer_empty.py new file mode 100644 index 00000000..30cff361 --- /dev/null +++ b/rest_framework/tests/test_serializer_empty.py @@ -0,0 +1,15 @@ +from django.test import TestCase +from rest_framework import serializers + + +class EmptySerializerTestCase(TestCase): +    def test_empty_serializer(self): +        class FooBarSerializer(serializers.Serializer): +            foo = serializers.IntegerField() +            bar = serializers.SerializerMethodField('get_bar') + +            def get_bar(self, obj): +                return 'bar' + +        serializer = FooBarSerializer() +        self.assertEquals(serializer.data, {'foo': 0})  | 
