def generate_model_serializer(name, model, model_fields, bases=None):
"""
Generates a `ModelSerializer` given the model_fields.
The specified `model_fields` is a tuple of model fields properties and
the already created drf_fields. The former are passed to the `Meta` class
of serializer in order to be created afterwards, whereas the latter are
specified directly to the serializer class.
"""
field_properties, drf_fields = classify_model_fields(
model_fields)
if not (field_properties or drf_fields):
return None
drf_fields = drf_fields or {}
meta_cls_content = {
'model': model,
'fields': drf_fields.keys() + field_properties.keys(),
'extra_kwargs': field_properties,
}
cls_content = {
field_name: serializer
for field_name, serializer in drf_fields.iteritems()
}
custom_bases = map(utils.LOAD_CLASS, bases or [])
base_cls = tuple(custom_bases) + (ApimasModelSerializer,)
meta_cls = type('Meta', (object,), meta_cls_content)
cls_content['Meta'] = meta_cls
return type(name, base_cls, cls_content)
评论列表
文章目录