使用Django REST框架对一个字段应用多个验证

nwwlzxa7  于 2023-02-20  发布在  Go
关注(0)|答案(1)|浏览(127)

我想检查传入请求正文中的字段是否只包含预定义整数的列表。
例如,给定:valid_values=[2, 3, 8]
[2, 8]应通过验证,[ 4, 8]['2', 8]]应引发验证错误。
首先,我尝试使用serializers.ChoiceField(),但它没有引发任何['2', 8]验证错误。
我也尝试过链接验证器,但显然Django REST框架不支持。所以这引发了一个TypeError:

class MySerializer(serializers.Serializer):
    valid_rules = [2, 3, 8]
    tags = serializers.ListField(child=serializers.IntegerField().ChoiceField(valid_rules))

我也没在文件上找到任何东西。

js81xvg6

js81xvg61#

您可以编写自己的验证方法并检查所有标记是否都在有效值列表中:

class MySerializer(serializers.Serializer):
    tags = serializers.ListField()

    def validate_tags(self, value):
        valid_values = [2, 3, 8]
        if not all(tag in valid_values for tag in value):
            raise serializers.ValidationError("Tags contain invalid values")
        return data

相关问题