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')]}
Что здесь не так? Заранее спасибо.