diff --git a/rest_framework/relations.py b/rest_framework/relations.py index 22078e64a..9609b906f 100644 --- a/rest_framework/relations.py +++ b/rest_framework/relations.py @@ -406,7 +406,8 @@ class HyperlinkedIdentityField(HyperlinkedRelatedField): def __init__(self, view_name=None, **kwargs): assert view_name is not None, 'The `view_name` argument is required.' - kwargs['read_only'] = True + if 'read_only' not in kwargs: + kwargs['read_only'] = True kwargs['source'] = '*' super(HyperlinkedIdentityField, self).__init__(view_name, **kwargs) diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py index 0952e190c..f99992140 100644 --- a/rest_framework/serializers.py +++ b/rest_framework/serializers.py @@ -468,7 +468,10 @@ class Serializer(BaseSerializer): except SkipField: pass else: - set_value(ret, field.source_attrs, validated_value) + if field.source_attrs != [] or field.source == "*": + set_value(ret, field.source_attrs, validated_value) + else: + set_value(ret, [field.field_name, ], primitive_value) if errors: raise ValidationError(errors)