mirror of
https://github.com/encode/django-rest-framework.git
synced 2024-11-27 20:14:01 +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 == '*':
|
||||
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.
|
||||
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`
|
||||
|
|
Loading…
Reference in New Issue
Block a user