django休息框架验证&刷新数据

时间:2015-06-04 03:00:20

标签: django validation django-rest-framework

我正在尝试验证password1,password2是否匹配不使用对象级别验证,因为它在所有字段级别验证后执行,但validate_field只接受一个值。如何在休息框架中实现以下内容?

std::ostream& operator<<(std::ostream& os, const std::vector<int*>::iterator pd)
{
     return os << *pd << std::endl; 
}

发生错误时,表单中的数据将被清除。即使出现像django form.fields?

这样的错误,我怎样才能保留输入数据

2 个答案:

答案 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