diff --git a/rest_framework/relations.py b/rest_framework/relations.py index 4d3bdba1d..c23554882 100644 --- a/rest_framework/relations.py +++ b/rest_framework/relations.py @@ -408,7 +408,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 a4b51ae9d..ed4641c75 100644 --- a/rest_framework/serializers.py +++ b/rest_framework/serializers.py @@ -469,7 +469,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)