Django REST: добавление аргумента источника в поле сериализатора приводит к ошибке "это поле обязательно"

Я пытаюсь создать обобщенный сериализатор для графов. На данный момент у меня есть

class NewVariableTypeValuePairSerializer(serializers.Serializer):
    def __init__(self, *args, **kwargs):
        x_source = kwargs.pop('x_source')
        y_source = kwargs.pop('y_source')
        x_serializertype = kwargs.pop('x_serializertype', None)
        y_serializertype = kwargs.pop('y_serializertype', None)

        super().__init__(*args, **kwargs)

        x_serializer = serializers.FloatField() if x_serializertype is None else x_serializertype()
        y_serializer = serializers.FloatField() if y_serializertype is None else y_serializertype()


        self.fields[x_source] = x_serializer
        self.fields[y_source] = y_serializer

Это работает как задумано, например

value_pair = {
            'x_value': 13.7,
            'y_value': 5
        }

res = NewVariableTypeValuePairSerializer(data=value_pair, x_source="x_value", y_source="y_value", y_serializertype=serializers.IntegerField)

дает мне JSON

{
    "x_value": 13.7,
    "y_value": 5
}

Теперь я хотел еще немного стандартизировать это, чтобы в приведенном выше примере я получил JSON

{
    "x": 13.7,
    "y": 5
}

Я пытался

class NewVariableTypeValuePairSerializer(serializers.Serializer):
    def __init__(self, *args, **kwargs):
        x_source = kwargs.pop('x_source')
        y_source = kwargs.pop('y_source')
        x_serializertype = kwargs.pop('x_serializertype', None)
        y_serializertype = kwargs.pop('y_serializertype', None)

        super().__init__(*args, **kwargs)

        x_serializer = serializers.FloatField(source=x_source) if x_serializertype is None else x_serializertype(
            source=x_source)
        y_serializer = serializers.FloatField(source=y_source) if y_serializertype is None else y_serializertype(
            source=y_source)


        self.fields['x'] = x_serializer
        self.fields['y'] = y_serializer

Но когда при попытке сериализации вышеуказанного диктанта я получаю ошибку

{'x': [ErrorDetail(string='This field is required', code='required')], 'y': [ErrorDetail(string='This field is required', code='required')]}

Что здесь не так? Заранее спасибо.

Вернуться на верх