django_rest.py 文件源码

python
阅读 20 收藏 0 点赞 0 评论 0

项目:apimas 作者: grnet 项目源码 文件源码
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
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号