Python rest_framework.serializers 模块,BaseSerializer() 实例源码

我们从Python开源项目中,提取了以下8个代码示例,用于说明如何使用rest_framework.serializers.BaseSerializer()

项目:apimas    作者:grnet    | 项目源码 | 文件源码
def perform_action(self, validated_data, instance=None, **kwargs):
        new_instance = None
        for k, v in validated_data.iteritems():
            drf_field = self.fields[k]
            if isinstance(drf_field, serializers.BaseSerializer):
                value = self._set_new_instance(
                    new_instance, instance, drf_field, v, **kwargs)
                if value:
                    new_instance = value
            elif instance is not None:
                self.update_non_model_field(drf_field, instance, v,
                                            validated_data)
            else:
                self.create_non_model_field(drf_field, v, validated_data)

        # In case of an update action where `instance` has specified,
        # there is a case when client sent empty data, and, therefore,
        # current instance is not updated. Thus, in this case, return
        # the current instance instead of the new one.
        return new_instance or getattr(self, 'instance', None)
项目:djangocms-rest-view    作者:nephila    | 项目源码 | 文件源码
def proxied(self):
        if not self._proxied:
            if self.bind_args:
                field_name, parent = self.bind_args

                if hasattr(parent, 'child') and parent.child is self:
                    # RecursiveField nested inside of a ListField
                    parent_class = parent.parent.__class__
                else:
                    # RecursiveField directly inside a Serializer
                    parent_class = parent.__class__

                assert issubclass(parent_class, BaseSerializer)

                if self.to is None:
                    proxied_class = parent_class
                else:
                    try:
                        module_name, class_name = self.to.rsplit('.', 1)
                    except ValueError:
                        module_name, class_name = parent_class.__module__, self.to

                    try:
                        proxied_class = getattr(
                            importlib.import_module(module_name), class_name)
                    except Exception as e:
                        raise ImportError(
                            'could not locate serializer %s' % self.to, e)

                # Create a new serializer instance and proxy it
                proxied = proxied_class(**self.init_kwargs)
                proxied.bind(field_name, parent)
                self._proxied = proxied

        return self._proxied
项目:drf-hal-json    作者:Artory    | 项目源码 | 文件源码
def _is_embedded_field(field):
        return isinstance(field, BaseSerializer)
项目:drf-hal-json    作者:Artory    | 项目源码 | 文件源码
def _is_embedded_field(field):
        return isinstance(field, BaseSerializer)
项目:apimas    作者:grnet    | 项目源码 | 文件源码
def get_nested_serializers(self):
        return {k: field for k, field in self.fields.iteritems()
                if isinstance(field, serializers.BaseSerializer)}
项目:prngmgr    作者:wolcomm    | 项目源码 | 文件源码
def __init__(self, query_set=None, serializer_class=None,  # noqa
                 query_params=None, static_filter=None, static_exclude=None,
                 static_order=None):
        """Initialise view instance."""
        if not isinstance(query_params, QueryParams):
            raise TypeError("%s not an instance of QueryParams" % query_params)
        if not isinstance(query_set, QuerySet):
            raise TypeError("%s not an instance of QuerySet" % query_set)
        if not issubclass(serializer_class, serializers.BaseSerializer):
            raise TypeError("%s not a subclass of BaseSerializer"
                            % serializer_class)
        query = query_params.query
        if not query:
            self._response = Response(status=status.HTTP_400_BAD_REQUEST)
        else:
            base = query_set
            records_total = base.count()
            filter_value = query['search']['value']
            filter_query = Q()
            exclude_query = Q()
            if static_filter:
                filter_query |= static_filter
            elif filter_value:
                filter_cols = []
                for col_index in query['columns']:
                    if query['columns'][col_index]['searchable']:
                        filter_cols.append(query['columns'][col_index]['name'])
                for col in filter_cols:
                    filter_query |= Q(**{"%s__icontains" % col: filter_value})
            if static_exclude:
                exclude_query |= static_exclude
            filtered = base.filter(filter_query).exclude(exclude_query)
            records_filtered = filtered.count()
            order_by_columns = list()
            if static_order:
                order_by_columns.append(static_order)
            else:
                for i in query['order']:
                    col_index = query['order'][i]['column']
                    col_name = query['columns'][col_index]['name']
                    if query['order'][i]['dir']:
                        order_by_columns.append("-%s" % col_name)
                    else:
                        order_by_columns.append(col_name)
            ordered = filtered.order_by(*order_by_columns)
            page_start = query['start']
            page_end = page_start + query['length']
            page = ordered[page_start:page_end]
            serializer = serializer_class(
                page, many=True, context={'request': query_params.request})
            data = serializer.data
            response = {
                'draw': query['draw'],
                'recordsTotal': records_total,
                'recordsFiltered': records_filtered,
                'data': data,
            }
            self._response = Response(response)
项目:py2swagger    作者:Arello-Mobile    | 项目源码 | 文件源码
def _get_field_object(self, request=False):
        """
        Creates swagger object for field for request or response

        :param request: is this object for request?
        :return: swagger object
        :rtype: OrderedDict
        """
        if isinstance(self._field, BaseSerializer):
            if getattr(self._field, 'many', None):
                result = {
                    'type': 'array',
                    'items': self._serializer_inrospector_class(self._field).build_response_object(),
                }
            else:
                result = self._serializer_inrospector_class(self._field).build_response_object()
        else:
            field_type, data_type, data_format = self._get_field_type(self._field)
            if data_type == 'file' and not request:
                data_type = 'string'
            result = OrderedDict(type=data_type)

            # Retrieve Field metadata
            max_val = getattr(self._field, 'max_value', None)
            min_val = getattr(self._field, 'min_value', None)
            max_length = getattr(self._field, 'max_length', None)
            default = self._get_default_value()
            description = getattr(self._field, 'help_text', '')

            if data_format:
                result['format'] = data_format

            if max_val is not None and data_type in ('integer', 'number'):
                result['minimum'] = min_val

            if max_val is not None and data_type in ('integer', 'number'):
                result['maximum'] = max_val

            if max_length is not None and data_type == 'string':
                result['maxLength'] = max_length

            if description:
                result['description'] = description

            if default is not None:
                result['default'] = default

            if field_type in ['multiple choice', 'choice']:
                if isinstance(self._field.choices, dict):
                    result['enum'] = [k for k in self._field.choices]

                if all(isinstance(item, int) for item in result.get('enum', ['1'])):
                    result['type'] = 'integer'
        return result
项目:apimas    作者:grnet    | 项目源码 | 文件源码
def _validate_configuration(self):
        meta_cls = getattr(self, 'Meta', None)
        if meta_cls is None:
            raise ex.ApimasException('`Meta` class cannot be found')
        model_fields = getattr(meta_cls, 'model_fields', [])
        fields = getattr(meta_cls, 'extra_fields', [])
        if not (fields or model_fields):
            raise ex.ApimasException(
                '`extra_fields` and `model_fields` attributes are not'
                ' specified')
        if not (self.model_ser_cls or self.ser_cls):
            raise ex.ApimasException(
                'A `ContainerSerializer` must define a `ModelSerializer` class'
                ' or a `Serializer class')
        if not (self.model_ser_cls or self.ser_cls):
            raise ex.ApimasException(
                'A `ContainerSerializer` must include a ModelSerializer'
                ' and Serializer class')
        if self.model_ser_cls:
            mro = inspect.getmro(self.model_ser_cls)
            if serializers.HyperlinkedModelSerializer not in mro:
                raise ex.ApimasException(
                    'A model serializer class must inherit'
                    ' `serializers.ModelSerializer`')
        if self.ser_cls:
            mro = inspect.getmro(self.ser_cls)
            if serializers.BaseSerializer not in mro:
                raise ex.ApimasException(
                    'A serializer class must implement'
                    ' `serializers.BaseSerializer`')
        return model_fields, fields