mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-05-08 01:43:43 +03:00
build_field, build_final_kwargs
This commit is contained in:
parent
94883ae7cd
commit
f72928ea98
|
@ -908,7 +908,22 @@ class ModelSerializer(Serializer):
|
||||||
ret[field_name] = declared_fields[field_name]
|
ret[field_name] = declared_fields[field_name]
|
||||||
continue
|
continue
|
||||||
|
|
||||||
elif field_name in info.fields_and_pk:
|
# Determine the serializer field class and keyword arguments.
|
||||||
|
field_cls, kwargs = self.build_field(field_name, info, model, depth)
|
||||||
|
|
||||||
|
# Populate any kwargs defined in `Meta.extra_kwargs`
|
||||||
|
kwargs = self.build_final_kwargs(kwargs, extra_kwargs, field_name)
|
||||||
|
|
||||||
|
# Create the serializer field.
|
||||||
|
ret[field_name] = field_cls(**kwargs)
|
||||||
|
|
||||||
|
# Add in any hidden fields.
|
||||||
|
ret.update(hidden_fields)
|
||||||
|
|
||||||
|
return ret
|
||||||
|
|
||||||
|
def build_field(self, field_name, info, model, depth):
|
||||||
|
if field_name in info.fields_and_pk:
|
||||||
# Create regular model fields.
|
# Create regular model fields.
|
||||||
model_field = info.fields_and_pk[field_name]
|
model_field = info.fields_and_pk[field_name]
|
||||||
field_cls = self._field_mapping[model_field]
|
field_cls = self._field_mapping[model_field]
|
||||||
|
@ -955,8 +970,15 @@ class ModelSerializer(Serializer):
|
||||||
(field_name, model.__class__.__name__)
|
(field_name, model.__class__.__name__)
|
||||||
)
|
)
|
||||||
|
|
||||||
# Populate any kwargs defined in `Meta.extra_kwargs`
|
return field_cls, kwargs
|
||||||
|
|
||||||
|
def build_final_kwargs(self, kwargs, extra_kwargs, field_name):
|
||||||
|
"""
|
||||||
|
Include an 'extra_kwargs' that have been included for this field,
|
||||||
|
possibly removing any incompatible existing keyword arguments.
|
||||||
|
"""
|
||||||
extras = extra_kwargs.get(field_name, {})
|
extras = extra_kwargs.get(field_name, {})
|
||||||
|
|
||||||
if extras.get('read_only', False):
|
if extras.get('read_only', False):
|
||||||
for attr in [
|
for attr in [
|
||||||
'required', 'default', 'allow_blank', 'allow_null',
|
'required', 'default', 'allow_blank', 'allow_null',
|
||||||
|
@ -970,12 +992,7 @@ class ModelSerializer(Serializer):
|
||||||
|
|
||||||
kwargs.update(extras)
|
kwargs.update(extras)
|
||||||
|
|
||||||
# Create the serializer field.
|
return kwargs
|
||||||
ret[field_name] = field_cls(**kwargs)
|
|
||||||
|
|
||||||
ret.update(hidden_fields)
|
|
||||||
|
|
||||||
return ret
|
|
||||||
|
|
||||||
def _get_model_fields(self, field_names, declared_fields, extra_kwargs):
|
def _get_model_fields(self, field_names, declared_fields, extra_kwargs):
|
||||||
"""
|
"""
|
||||||
|
|
Loading…
Reference in New Issue
Block a user