我Field level Validation
在序列化器中使用,并且遇到在验证第二个字段时需要第一个字段的值的情况。我知道object level validation
我可以访问它,但是我的Serailzer有访问权限many=True
,在对象级别验证中,我无法告诉客户端哪个迭代引发了错误。
Serailzer:
class Keys_Serializer(serializers.Serializer):
"""
"""
key_id = serializers.IntegerField(required=True)
key_name = serializers.CharField(required=True)
value_id = serializers.IntegerField(required=False)
def validate_key_id(self, value):
"""
validate key id
"""
*** validate key_id here ***
return value
def validate_value_id(self, value):
"""
validate value_id w.r.t key_id
"""
*** I need key_id of current iteration here so that I can validate value_id. ***
return value
在value_id验证中,有什么方法可以访问key_id的值。
不,那是不可能的。如果您需要访问多个值,则必须使用Object-level validation
(参见docs):
class Keys_Serializer(serializers.Serializer):
key_id = serializers.IntegerField(required=True)
key_name = serializers.CharField(required=True)
value_id = serializers.IntegerField(required=False)
def validate(self, data):
# here you can access all values
key_id = data['key_id']
value_id = data['value_id']
# perform you validation
if key_id != value_id:
raise serializers.ValidationError("key_id must be equal to value_id")
return data
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句