mirror of
https://github.com/encode/django-rest-framework.git
synced 2024-11-28 04:24:00 +03:00
Add support for source with attributes in extra_kwargs
This commit is contained in:
parent
9e05aa5962
commit
dd0bb97082
|
@ -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`
|
||||||
|
|
Loading…
Reference in New Issue
Block a user