django rest框架字段级表单验证

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 }}

我使用ModelViewSet和TemplateHTMLRenderer来使用表单和流程“post”方法。当我尝试呈现字段错误时,呈现的错误[u'此字段可能不是空的。']。如何使其呈现简单的消息“This…”

在html中

<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.'

我将字段中的“空白”改为“必填”;有些字段使用“必填”,有些字段使用“空白”。谢谢钱杜,拉胡尔。