Add support for source with attributes in extra_kwargs

This commit is contained in:
Lucas Berg 2023-08-16 17:24:12 +02:00
parent 9e05aa5962
commit dd0bb97082

View File

@ -1117,9 +1117,36 @@ class ModelSerializer(Serializer):
if source == '*': if source == '*':
source = field_name source = field_name
# Get the right model and info for source with attributes
source_attrs = source.split('.')
source_info = info
source_model = model
if len(source_attrs) > 1:
attr_info = info
attr_model = model
for attr in source_attrs[:-1]:
if attr not in attr_info.relations:
break
attr_model = attr_info.relations[attr].related_model
attr_info = model_meta.get_field_info(attr_model)
else:
attr = source_attrs[-1]
if (
attr in attr_info.fields_and_pk
or attr in attr_info.relations
or hasattr(attr_model, attr)
or attr == self.url_field_name
):
source = attr
source_info = attr_info
source_model = attr_model
# 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(
source, info, model, depth source, source_info, source_model, depth
) )
# Include any kwargs defined in `Meta.extra_kwargs` # Include any kwargs defined in `Meta.extra_kwargs`