You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 07:42:01