serializers.py 文件源码

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

项目:django-clubhouse 作者: chazmead 项目源码 文件源码
def find_for_model(model, app_label=None, serializers_module='serializers'):
        """
        This is extends the serializer_registry.find_for_model by searching
        installed the app provided by either the app_label arg or the
        model._meta.app_label property, and the serializers_module arg
        it will loop through any classes found in this module and check for a
        Meta.model property matching the provided model and return if found.

        i.e. it will return the first modelserializer it finds matching provided
        model in the app.module provided, if non found raises ValueError
        """
        from clubhouse.core.options import serializer_registry, NotRegistered
        try:
            return serializer_registry.find_for_model(model)
        except NotRegistered:
            pass

        # In the event the serializer is not registered, return the first
        # serializer found in the app provided by app_label.serializer_module
        model = ensure_model(model)
        app_label = app_label if app_label else model._meta.app_label
        module_name = '%s.%s' % (app_label,serializers_module)

        try:
            members = sys.modules[module_name]
        except KeyError:
            from importlib import import_module
            import_module(module_name)
            members = sys.modules[module_name]

        for name, obj in inspect.getmembers(members,inspect.isclass):
            try:
                if issubclass(obj, serializers.ModelSerializer)\
                        and obj.Meta.model is model:
                    return obj
            except AttributeError:
                # Probably abstract
                continue

        raise ValueError('Could not find serializer for model: %s' % model)
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号