Сериализатор 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')])]

значение просто исчезает. Есть идеи, почему это может происходить? Может быть, объект, который я сериализую, каким-то образом не действителен?

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