Commit 9e29c638 by Tom Christie

Ensure read-only fields don't break with current HTML renderer behavior

parent 8d4ba478
...@@ -777,6 +777,7 @@ class IntegerField(WritableField): ...@@ -777,6 +777,7 @@ class IntegerField(WritableField):
type_name = 'IntegerField' type_name = 'IntegerField'
type_label = 'integer' type_label = 'integer'
form_field_class = forms.IntegerField form_field_class = forms.IntegerField
empty = 0
default_error_messages = { default_error_messages = {
'invalid': _('Enter a whole number.'), 'invalid': _('Enter a whole number.'),
...@@ -808,6 +809,7 @@ class FloatField(WritableField): ...@@ -808,6 +809,7 @@ class FloatField(WritableField):
type_name = 'FloatField' type_name = 'FloatField'
type_label = 'float' type_label = 'float'
form_field_class = forms.FloatField form_field_class = forms.FloatField
empty = 0
default_error_messages = { default_error_messages = {
'invalid': _("'%s' value must be a float."), 'invalid': _("'%s' value must be a float."),
...@@ -828,6 +830,7 @@ class DecimalField(WritableField): ...@@ -828,6 +830,7 @@ class DecimalField(WritableField):
type_name = 'DecimalField' type_name = 'DecimalField'
type_label = 'decimal' type_label = 'decimal'
form_field_class = forms.DecimalField form_field_class = forms.DecimalField
empty = Decimal('0')
default_error_messages = { default_error_messages = {
'invalid': _('Enter a number.'), 'invalid': _('Enter a number.'),
......
...@@ -310,6 +310,8 @@ class BaseSerializer(WritableField): ...@@ -310,6 +310,8 @@ class BaseSerializer(WritableField):
ret.fields = self._dict_class() ret.fields = self._dict_class()
for field_name, field in self.fields.items(): 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) field.initialize(parent=self, field_name=field_name)
key = self.get_field_key(field_name) key = self.get_field_key(field_name)
value = field.field_to_native(obj, field_name) value = field.field_to_native(obj, field_name)
......
...@@ -159,8 +159,7 @@ class BasicTests(TestCase): ...@@ -159,8 +159,7 @@ class BasicTests(TestCase):
expected = { expected = {
'email': '', 'email': '',
'content': '', 'content': '',
'created': None, 'created': None
'sub_comment': ''
} }
self.assertEqual(serializer.data, expected) self.assertEqual(serializer.data, expected)
......
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})
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment