我正在尝试验证password1,password2是否匹配不使用对象级别验证,因为它在所有字段级别验证后执行,但validate_field只接受一个值。如何在休息框架中实现以下内容?
std::ostream& operator<<(std::ostream& os, const std::vector<int*>::iterator pd)
{
return os << *pd << std::endl;
}
发生错误时,表单中的数据将被清除。即使出现像django form.fields?
这样的错误,我怎样才能保留输入数据答案 0 :(得分:4)
不要添加字段级验证,而是将此检查添加到对象级验证中,因为您需要访问多个字段。
甚至DRF文档都定义了这个:
对象级验证
要进行需要访问多个字段的任何其他验证, 将一个名为.validate()的方法添加到Serializer子类中。这个 method接受一个参数,它是字段值的字典。 如果需要,它应该引发ValidationError,或者只返回 验证值。
您可以执行以下操作:
def validate(self, data):
...
password1 = data['password1']
password2 = data['password2']
if password1 and password2 and password1 != password2:
raise serializers.ValidationError('The two passwords do not match.')
....
return data
还要在发生错误时访问初始数据,您可以使用your_serializer.initial_data
。
答案 1 :(得分:0)
用于在DRF中验证密码的类似内容
def validate_password2(self, attrs, source):
"""
password_confirmation check
"""
password_confirmation = attrs[source]
password = attrs['password1']
if password_confirmation != password:
raise serializers.ValidationError('password didnot match')
return attrs