mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-02-02 20:54:42 +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]
|
||||
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.
|
||||
model_field = info.fields_and_pk[field_name]
|
||||
field_cls = self._field_mapping[model_field]
|
||||
|
@ -955,8 +970,15 @@ class ModelSerializer(Serializer):
|
|||
(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, {})
|
||||
|
||||
if extras.get('read_only', False):
|
||||
for attr in [
|
||||
'required', 'default', 'allow_blank', 'allow_null',
|
||||
|
@ -970,12 +992,7 @@ class ModelSerializer(Serializer):
|
|||
|
||||
kwargs.update(extras)
|
||||
|
||||
# Create the serializer field.
|
||||
ret[field_name] = field_cls(**kwargs)
|
||||
|
||||
ret.update(hidden_fields)
|
||||
|
||||
return ret
|
||||
return kwargs
|
||||
|
||||
def _get_model_fields(self, field_names, declared_fields, extra_kwargs):
|
||||
"""
|
||||
|
|
Loading…
Reference in New Issue
Block a user