Django REST Framework如何修改"This field may not be blank."校验错误提示
问题根因
你当前配置的自定义错误仅覆盖了required类型错误,实际收到的This field may not be blank.是blank类型错误,DRF对两种场景有独立的错误码:
required:请求完全未提交该字段blank:请求提交了该字段,但值为空字符串/空值,与模型blank=False的约束冲突
解决方案
直接修改序列化器的extra_kwargs配置,同时覆盖两个错误类型的提示即可,修改后的序列化器代码如下:
from rest_framework import serializers from django.contrib.auth import get_user_model class UserSerializer(serializers.ModelSerializer): class Meta: model = get_user_model() fields = '__all__' read_only_fields = ('last_login',) extra_kwargs = { "phone": { "error_messages": { "required": "请提供有效的手机号码", "blank": "手机号码不能为空" } }, "name": { "error_messages": { "required": "请提供用户姓名", "blank": "用户姓名不能为空" } } }
额外排查点
如果你之前重写过序列化器的validate方法,请确认抛出的是DRF内置的serializers.ValidationError,而不是Python原生的ValueError,否则DRF无法将错误转换为400校验响应,会直接抛出500服务异常。
验证方式
测试两种场景确认配置生效:
- 完全不传
phone/name字段,会返回对应required的自定义提示 - 传
phone/name为空字符串,会返回对应blank的自定义提示
内容的提问来源于stack exchange,提问作者Omar Fayad
相关产品推荐
相关产品推荐

