Сериализатор DRF пропускает поля после валидации
У меня есть простой сериализатор DRF:
class CustomerFeatureSerializer(serializers.Serializer):
"""
Serializer for a customer feature.
"""
feature_id = serializers.CharField()
feature_value = serializers.SerializerMethodField()
feature_type = serializers.CharField()
name = serializers.CharField()
def get_feature_value(self, obj):
"""
Return the feature_value of the feature.
"""
return obj.get("feature_value", None)
Поле feature_value
является полем метода, поскольку оно может быть либо булевым, либо целым, либо строковым значением (поэтому сейчас я просто сохранил его как поле метода для получения значения).
Я использую это для сериализации некоторых объектов, которые я генерирую вручную (они не соответствуют 1:1 с моделью), но по какой-то причине после проверки поля name
и feature_value
просто полностью исчезают.
for feature in toggleable_features:
display = {
"feature_id": feature.internal_name,
"name": feature.name,
"feature_value": profile.feature_value(feature)
if profile.has_feature(feature.internal_name, use_cache=False)
else False,
"feature_type": feature.type,
}
features.append(display)
print(display)
print(features)
serializer = CustomerFeatureSerializer(data=features, many=True)
print(serializer.initial_data)
serializer.is_valid(raise_exception=True)
print(serializer.validated_data)
return Response(serializer.validated_data)
, а операторы печати выводят:
{'feature_id': 'feat-id', 'name': 'feat name', 'feature_value': True, 'feature_type': 'boolean'}
[{'feature_id': 'feat-id', 'name': 'feat name', 'feature_value': True, 'feature_type': 'boolean'}]
[{'feature_id': 'feat-id', 'name': 'feat name', 'feature_value': True, 'feature_type': 'boolean'}]
[OrderedDict([('feature_id', 'feat-id'), ('feature_type', 'boolean'), ('name', 'feat name')])]
значение просто исчезает. Есть идеи, почему это может происходить? Может быть, объект, который я сериализую, каким-то образом не действителен?