Skip to content

Commit

Permalink
Fix most tests
Browse files Browse the repository at this point in the history
  • Loading branch information
vdel committed Oct 15, 2018
1 parent d48c7bd commit 82963bb
Showing 1 changed file with 16 additions and 5 deletions.
21 changes: 16 additions & 5 deletions rest_framework/serializers.py
Expand Up @@ -370,6 +370,12 @@ def _writable_fields(self):
field for field in self.fields.values() if not field.read_only
]

@cached_property
def _read_only_fields(self):
return [
field for field in self.fields.values() if field.read_only
]

@cached_property
def _readable_fields(self):
return [
Expand Down Expand Up @@ -431,9 +437,7 @@ def run_validation(self, data=empty):
if is_empty_value:
return data

to_validate = self._read_only_defaults()
to_validate.update(data)
value = self.to_internal_value(to_validate)
value = self.to_internal_value(data)
try:
self.run_validators(value)
value = self.validate(value)
Expand Down Expand Up @@ -473,9 +477,11 @@ def to_internal_value(self, data):

ret = OrderedDict()
errors = OrderedDict()
fields = self._writable_fields
writable_fields = self._writable_fields
read_only_fields = self._read_only_fields
read_only_defaults = self._read_only_defaults()

for field in fields:
for field in writable_fields:
validate_method = getattr(self, 'validate_' + field.field_name, None)
primitive_value = field.get_value(data)
try:
Expand All @@ -491,6 +497,11 @@ def to_internal_value(self, data):
else:
set_value(ret, field.source_attrs, validated_value)

for field in read_only_fields:
primitive_value = field.get_value(read_only_defaults)
if primitive_value is not empty:
set_value(ret, field.source_attrs, primitive_value)

if errors:
raise ValidationError(errors)

Expand Down

0 comments on commit 82963bb

Please sign in to comment.