Skip to content

Field Mapping Override Mixin

FieldMappingOverride

Override or extend field mapping via SARITASA_DRF_FIELD_MAPPING.

Source code in saritasa_drf_tools/serializers/mixins/field_mapping_override_mixin.py
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
class FieldMappingOverride:
    """Override or extend field mapping via SARITASA_DRF_FIELD_MAPPING."""

    @property
    def serializer_field_mapping(
        self,
    ) -> dict[type[models.Field], type[serializers.Field]]:
        """Extend serializer mapping with custom fields."""
        serializer_field_mapping = super().serializer_field_mapping  # type: ignore
        for (
            django_field,
            drf_field,
        ) in self.extract_serializer_field_mapping_from_settings().items():
            serializer_field_mapping[django_field] = drf_field
        return serializer_field_mapping

    def extract_serializer_field_mapping_from_settings(
        self,
    ) -> dict[type[models.Field], type[serializers.Field]]:
        """Extract field mapping from settings."""
        import_mapping = getattr(settings, "SARITASA_DRF_FIELD_MAPPING", {})
        return {
            import_string(django_field): import_string(drf_field)
            for django_field, drf_field in import_mapping.items()
        }

serializer_field_mapping property

Extend serializer mapping with custom fields.

extract_serializer_field_mapping_from_settings()

Extract field mapping from settings.

Source code in saritasa_drf_tools/serializers/mixins/field_mapping_override_mixin.py
23
24
25
26
27
28
29
30
31
def extract_serializer_field_mapping_from_settings(
    self,
) -> dict[type[models.Field], type[serializers.Field]]:
    """Extract field mapping from settings."""
    import_mapping = getattr(settings, "SARITASA_DRF_FIELD_MAPPING", {})
    return {
        import_string(django_field): import_string(drf_field)
        for django_field, drf_field in import_mapping.items()
    }