Ejemplo n.º 1
0
def test_get_serializer_class(data_fixture):
    group = data_fixture.create_group(name='Group 1')

    group_serializer = get_serializer_class(Group, ['name'])(group)
    assert group_serializer.data == {'name': 'Group 1'}
    assert group_serializer.__class__.__name__ == 'GroupSerializer'

    group_serializer_2 = get_serializer_class(Group, ['id', 'name'],
                                              {'id': CharField()})(group)
    assert group_serializer_2.data == {'id': str(group.id), 'name': 'Group 1'}
Ejemplo n.º 2
0
def test_get_serializer_class(data_fixture):
    group = data_fixture.create_group(name="Group 1")

    group_serializer = get_serializer_class(Group, ["name"])(group)
    assert group_serializer.data == {"name": "Group 1"}
    assert group_serializer.__class__.__name__ == "GroupSerializer"

    group_serializer_2 = get_serializer_class(Group, ["id", "name"],
                                              {"id": CharField()})(group)
    assert group_serializer_2.data == {"id": str(group.id), "name": "Group 1"}
Ejemplo n.º 3
0
def get_row_serializer_class(model, base_class=None, is_response=False):
    """
    Generates a Django rest framework model serializer based on the available fields
    that belong to this model. For each table field, used to generate this serializer,
    a serializer field will be added via the `get_serializer_field` method of the field
    type.

    :param model: The model for which to generate a serializer.
    :type model: Model
    :param base_class: The base serializer class that will be extended when
        generating the serializer. By default this is a regular ModelSerializer.
    :type base_class: ModelSerializer
    :param is_response: Indicates if the serializer is going to be used for a response
        instead of handling input data. If that is the case other serializer fields
        might be used depending on the field type.
    :type is_response: bool
    :return: The generated serializer.
    :rtype: ModelSerializer
    """

    field_objects = model._field_objects
    field_names = [field['name'] for field in field_objects.values()]
    field_overrides = {
        field['name']:
        field['type'].get_response_serializer_field(field['field'])
        if is_response else field['type'].get_serializer_field(field['field'])
        for field in field_objects.values()
    }
    return get_serializer_class(model, field_names, field_overrides,
                                base_class)
Ejemplo n.º 4
0
    def get_serializer_class(self, *args, **kwargs):
        """
        Returns a model serializer class based on this type field names and overrides.

        :raises ValueError: If the object does not have a `model_class` attribute.
        :return: The generated model serializer class.
        :rtype: ModelSerializer
        """

        model_class = getattr(self, 'model_class')
        if not model_class:
            raise ValueError('Attribute model_class must be set, maybe you forgot to '
                             'extend the ModelInstanceMixin?')

        return get_serializer_class(
            model_class, self.serializer_field_names,
            field_overrides=self.serializer_field_overrides,
            *args, **kwargs
        )
Ejemplo n.º 5
0
def get_row_serializer_class(model,
                             base_class=None,
                             is_response=False,
                             field_ids=None):
    """
    Generates a Django rest framework model serializer based on the available fields
    that belong to this model. For each table field, used to generate this serializer,
    a serializer field will be added via the `get_serializer_field` method of the field
    type.

    :param model: The model for which to generate a serializer.
    :type model: Model
    :param base_class: The base serializer class that will be extended when
        generating the serializer. By default this is a regular ModelSerializer.
    :type base_class: ModelSerializer
    :param is_response: Indicates if the serializer is going to be used for a response
        instead of handling input data. If that is the case other serializer fields
        might be used depending on the field type.
    :type is_response: bool
    :param field_ids: If provided only the field ids in the list will be included in
        the serializer. By default all the fields of the model are going to be
        included. Note that the field id must exist in the model in order to work.
    :type field_ids: list or None
    :return: The generated serializer.
    :rtype: ModelSerializer
    """

    field_objects = model._field_objects
    field_names = [
        field["name"] for field in field_objects.values()
        if field_ids is None or field["field"].id in field_ids
    ]
    field_overrides = {
        field["name"]:
        field["type"].get_response_serializer_field(field["field"])
        if is_response else field["type"].get_serializer_field(field["field"])
        for field in field_objects.values()
        if field_ids is None or field["field"].id in field_ids
    }
    return get_serializer_class(model, field_names, field_overrides,
                                base_class)
Ejemplo n.º 6
0
def get_row_serializer_class(model, base_class=None):
    """
    Generates a Django rest framework model serializer based on the available fields
    that belong to this model. For each table field, used to generate this serializer,
    a serializer field will be added via the `get_serializer_field` method of the field
    type.

    :param model: The model for which to generate a serializer.
    :type model: Model
    :param base_class: The base serializer class that will be extended when
        generating the serializer. By default this is a regular ModelSerializer.
    :type base_class: ModelSerializer
    :return: The generated serializer.
    :rtype: ModelSerializer
    """

    field_objects = model._field_objects
    field_names = [field['name'] for field in field_objects.values()]
    field_overrides = {
        field['name']: field['type'].get_serializer_field(field['field'])
        for field in field_objects.values()
    }
    return get_serializer_class(model, field_names, field_overrides, base_class)