Как переопределить метод validate?

Рейтинг: 0Ответов: 1Опубликовано: 10.08.2023
class ProductSerializer(ModelSerializer):
    discount = serializers.ChoiceField(choices=[0, 10, 15, 20, 30, 50])

    def validate(self, data):
        if data['discount'] not in [0, 10, 15, 20, 30, 50]:
            raise serializers.ValidationError(f"invalid discount")
    
        return super().validate(data)

Есть такой код и по идее, когда серверу передать невалидный discount, то должна быть ошибка

{
    "discount": [
        "invalid discount"
    ]
}

но у меня почему-то другая:

{
    "discount": [
        "\"203\" is not a valid choice."
    ]
}

На месте 203 может быть любое другое неверное число

Ответы

▲ 0

Попробуй такой вариант:

class ProductSerializer(ModelSerializer):
    discount = serializers.ChoiceField()

    def validate(self, data):
        if data['discount'] not in [0, 10, 15, 20, 30, 50]:
            raise serializers.ValidationError(f"invalid discount")
    
        return super().validate(data)