Do not ignore source when building fields dynamically

This commit fixes the issue when you set the keyword argument `source`
and your have not set the serializer fields explicitly. Then the
construction of field failed because there is not actually any model
field with that name.

However, you are still able to imply the name of model field by
providing the `source` keyword argument.
This commit is contained in:
Thodoris Sotiropoulos 2016-11-17 18:51:22 +02:00
parent 45e90c3398
commit 4c2d6b9bb7

View File

@ -995,13 +995,15 @@ class ModelSerializer(Serializer):
fields[field_name] = declared_fields[field_name] fields[field_name] = declared_fields[field_name]
continue continue
extra_field_kwargs = extra_kwargs.get(field_name, {})
source = extra_field_kwargs.get('source') or field_name
# Determine the serializer field class and keyword arguments. # Determine the serializer field class and keyword arguments.
field_class, field_kwargs = self.build_field( field_class, field_kwargs = self.build_field(
field_name, info, model, depth source, info, model, depth
) )
# Include any kwargs defined in `Meta.extra_kwargs` # Include any kwargs defined in `Meta.extra_kwargs`
extra_field_kwargs = extra_kwargs.get(field_name, {})
field_kwargs = self.include_extra_kwargs( field_kwargs = self.include_extra_kwargs(
field_kwargs, extra_field_kwargs field_kwargs, extra_field_kwargs
) )