Django / DRF在 validate方法中抛出ValidationError,并将其绑定到某个字段

后端开发 2026-07-09

我有一个序列化器:

class MySerializer(serializers.ModelSerializer):
    name = serailizer.CharField()
    class Meta:
        fields = [
            "name"
        ]

我想在名称包含字母“W”时抛出一个ValidationError

于是我这样写:

class InvalidNameError(serializers.ValidationError):
    default_detail = _("This name invalid")
    default_code = "invalid_name"

class MySerializer(serializers.ModelSerializer):
    name = serailizer.CharField()

    def validate_name(self, value: str):
        if "W" in value:
            raise InvalidName
        return value

    class Meta:
        fields = [
            "name"
        ]

但我希望它在 validate 中处理

class InvalidNameError(serializers.ValidationError):
    default_detail = _("This name invalid")
    default_code = "invalid_name"

class MySerializer(serializers.ModelSerializer):
    name = serailizer.CharField()

    def validate(self, attrs):
        data = super().validate(attr)
        if "W" in data.get("name", ""):
            raise InvalidName
        return data

    class Meta:
        fields = [
            "name"
        ]

但在第二种方式中,它被标记为一个 non_field_errors,我想在 validate 进行处理,并在错误中仍然把它标记为 name

解决方案

与其在validate函数中进行:

raise InvalidName

你可以这样做:

raise serializers.ValidationError({"name": InvalidNameError().detail})

下面是一个解释它的文档 文档

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章