def construct_drf_collection(self, instance, spec, loc, context):
"""
Constructor for `.drf_collection` predicate.
It generates the required, `Serializer` class, and `ViewSet` class
based on the field schema, actions, permissions and additional
configuation (filter_fields, mixins) as specified on spec.
"""
endpoint = loc[0]
parent = context.get('parent_name')
constructed = context.get('constructed')
if '.collection' not in constructed:
raise doc.DeferConstructor
field_schema = doc.doc_get(instance, ('*',))
actions = doc.doc_get(instance, ('.actions', self.ADAPTER_CONF)) or []
model = self._get_or_import_model(loc[0] + '/' + parent,
loc + ('model',),
context.get('top_spec'))
model_serializers = spec.pop('model_serializers', [])
extra_serializers = spec.pop('serializers', [])
serializer = self.generate_serializer(
field_schema, parent, model=model,
model_serializers=model_serializers,
extra_serializers=extra_serializers)
kwargs = {k: v for k, v in spec.iteritems() if k != 'model'}
permissions = self.get_permissions(loc[:-1], context.get('top_spec'))
view = generate_view(parent, serializer, model, actions=actions,
permissions=permissions, **kwargs)
instance[self.ADAPTER_CONF] = view
self.serializers[endpoint + '/' + parent] = serializer
self.views[endpoint + '/' + parent] = view
return instance
评论列表
文章目录