django rest框架字段级表单验证
我使用ModelViewSet和TemplateHTMLRenderer来使用表单和流程“post”方法。当我尝试呈现字段错误时,呈现的错误[u'此字段可能不是空的。']。如何使其呈现简单的消息“This…” 在html中django rest框架字段级表单验证,django,validation,field,django-rest-framework,Django,Validation,Field,Django Rest Framework,我使用ModelViewSet和TemplateHTMLRenderer来使用表单和流程“post”方法。当我尝试呈现字段错误时,呈现的错误[u'此字段可能不是空的。']。如何使其呈现简单的消息“This…” 在html中 <form action="." method="post" id="myform"> <input name="first_name" type="text"> <ul> {{ errors.first_name }}
<form action="." method="post" id="myform">
<input name="first_name" type="text">
<ul> {{ errors.first_name }}</ul>
</form>
我在serializer.py中覆盖了rest框架的默认必需错误消息,但它似乎忽略了自定义必需的错误消息,并显示了默认必需的错误消息,如“此字段可能不是空的…”
在serializer.py中
class UserSerializer(serializers.ModelSerializer):
first_name = serializers.RegexField(regex=r'^[a-zA-Z -.\'\_]+$',
required=True,
error_messages={'required': _('Please enter your first name.'),
'invalid': _('Please enter a valid name.')})
这里出了什么问题?错误不会出现,因为DRF最初正在运行字段验证。如果这些验证失败,将显示默认错误 根据源代码,默认错误消息存储在
default\u error\u messages
字典中。以下是一些代码片段:
字段:
class Field(object):
default_error_messages = {
'required': _('This field is required.'),
'null': _('This field may not be null.')
}
CharField:
class CharField(Field):
default_error_messages = {
'blank': _('This field may not be blank.'),
'max_length': _('Ensure this field has no more than {max_length} characters.'),
'min_length': _('Ensure this field has at least {min_length} characters.')
}
class RegexField(CharField):
default_error_messages = {
'invalid': _('This value does not match the required pattern.')
}
RegexField:
class CharField(Field):
default_error_messages = {
'blank': _('This field may not be blank.'),
'max_length': _('Ensure this field has no more than {max_length} characters.'),
'min_length': _('Ensure this field has at least {min_length} characters.')
}
class RegexField(CharField):
default_error_messages = {
'invalid': _('This value does not match the required pattern.')
}
因此,您可以通过覆盖序列化程序的\uuuuu init\uuuu
方法来覆盖默认错误消息
值,并提供自定义错误消息
class UserSerializer(serializers.ModelSerializer):
first_name = serializers.RegexField(regex=r'^[a-zA-Z -.\'\_]+$',
required=True)
def __init__(self, *args, **kwargs):
super(UserSerializer, self).__init__(*args, **kwargs)
self.fields['first_name'].error_messages['required'] = 'Please enter your first name.'
self.fields['first_name'].error_messages['invalid'] = 'Please enter a valid name.'
我将字段中的“空白”改为“必填”;有些字段使用“必填”,有些字段使用“空白”。谢谢钱杜,拉胡尔。