django serializer validate field 方法错误解释
django serializer validate field method wrong interpretation
我的结论应该是错误的,但我不能换个方式理解。
使用此模型:
class ExampleSerializer(serializers.Serializer):
field = serializers.CharField()
通常 django 在使用模型之前会自行检查字段,因此您不能将 c_field 用作整数,因为它是一个字符字段。
现在,我想添加自定义验证:
class ExampleSerializer(serializers.Serializer):
字段 = serializers.CharField()
def validate_field(self, data):
if data == 'correct':
return 'good'
else:
raise serializers.ValidationError('wrong data')
对我来说,这应该是正确的使用方式,它在该字段中添加了另一个 'validation',但我看到它一直以这种方式使用:
class ExampleSerializer(serializers.Serializer):
字段 = serializers.CharField()
def validate_field(self, data):
if data == 'correct':
return {'data': data}
我不明白,因为,returns有些不同,如果你检查它:
res = serializer.ExampleSerializer(data={'field': 'field_char'})
res.is_valid()
res.data
现在数据是字典...
这是我不明白的,你可以改变它,所以任何看到序列化器的人都会感到困惑(如果你有很多验证器,你需要寻找正确的验证器来理解正在发生的事情),以及它的名字感到困惑,因为它是 'validate',而不是 'read_modify' 或其他什么。
所以,我认为这是另一种我无法找到和理解的解释。有什么想法吗?
说明
您的第一个用例应该是首选方式。通过在具有 validate_<field_name>
名称的序列化程序中实现一个方法来使用自定义 field-level 验证,应该 return 与实际字段的数据类型相同。可以找到更多详细信息 here。
这段代码的原因
res = serializer.ExampleSerializer(data={'field': 'field_char'})
res.is_valid()
res.data
return与您预期的不同是因为您访问了错误的属性。
.data
是将被序列化为 JSON. 的值
.validated_data
是将被反序列化为 python 对象的值。这意味着通过序列化程序中的 validate_<field_name>
方法从 field-level 验证中 returned 的值将是 .validated_data
. 中字段的值
备注
如果你想在不改变值的情况下对单个字段执行多次验证,你应该使用 validators
我的结论应该是错误的,但我不能换个方式理解。 使用此模型:
class ExampleSerializer(serializers.Serializer):
field = serializers.CharField()
通常 django 在使用模型之前会自行检查字段,因此您不能将 c_field 用作整数,因为它是一个字符字段。
现在,我想添加自定义验证:
class ExampleSerializer(serializers.Serializer): 字段 = serializers.CharField()
def validate_field(self, data):
if data == 'correct':
return 'good'
else:
raise serializers.ValidationError('wrong data')
对我来说,这应该是正确的使用方式,它在该字段中添加了另一个 'validation',但我看到它一直以这种方式使用:
class ExampleSerializer(serializers.Serializer): 字段 = serializers.CharField()
def validate_field(self, data):
if data == 'correct':
return {'data': data}
我不明白,因为,returns有些不同,如果你检查它:
res = serializer.ExampleSerializer(data={'field': 'field_char'})
res.is_valid()
res.data
现在数据是字典... 这是我不明白的,你可以改变它,所以任何看到序列化器的人都会感到困惑(如果你有很多验证器,你需要寻找正确的验证器来理解正在发生的事情),以及它的名字感到困惑,因为它是 'validate',而不是 'read_modify' 或其他什么。
所以,我认为这是另一种我无法找到和理解的解释。有什么想法吗?
说明
您的第一个用例应该是首选方式。通过在具有 validate_<field_name>
名称的序列化程序中实现一个方法来使用自定义 field-level 验证,应该 return 与实际字段的数据类型相同。可以找到更多详细信息 here。
这段代码的原因
res = serializer.ExampleSerializer(data={'field': 'field_char'})
res.is_valid()
res.data
return与您预期的不同是因为您访问了错误的属性。
.data
是将被序列化为 JSON. 的值
.validated_data
是将被反序列化为 python 对象的值。这意味着通过序列化程序中的validate_<field_name>
方法从 field-level 验证中 returned 的值将是.validated_data
. 中字段的值
备注
如果你想在不改变值的情况下对单个字段执行多次验证,你应该使用 validators