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

如何在Django中使用Serializer验证Enum枚举类型字段

验证Enum类型的Serializer实现

假设你使用的是Django REST Framework (DRF) 的Serializer,这里提供两种直接可行的验证方式:

方法一:使用ChoiceField关联Enum选项

利用StrEnum的成员值生成choices列表,直接绑定到ChoiceField上,DRF会自动完成验证:

from rest_framework import serializers
from your_module import DataTypeEnum

class YourPostSerializer(serializers.Serializer):
    # 其他字段...
    value = serializers.ChoiceField(
        choices=[(item.value, item.value) for item in DataTypeEnum],
        required=True
    )

当请求的value不在Enum可选值范围内时,DRF会自动返回错误响应,提示格式类似"value must be one of: float, integer, boolean"。

方法二:自定义字段验证逻辑

如果需要自定义错误提示或添加额外校验逻辑,可以在Serializer中编写专属验证方法:

from rest_framework import serializers
from your_module import DataTypeEnum

class YourPostSerializer(serializers.Serializer):
    # 其他字段...
    value = serializers.CharField(required=True)

    def validate_value(self, value):
        allowed_values = [item.value for item in DataTypeEnum]
        if value not in allowed_values:
            raise serializers.ValidationError(
                f"value必须是以下值之一: {', '.join(allowed_values)}"
            )
        return value

如果你用的是Pydantic Serializer

如果是FastAPI等场景下的Pydantic序列化验证,直接将字段类型指定为Enum类即可,Pydantic会自动处理校验:

from pydantic import BaseModel
from your_module import DataTypeEnum

class YourPostRequest(BaseModel):
    # 其他字段...
    value: DataTypeEnum

内容的提问来源于stack exchange,提问作者Peter Kronenberg

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 03:32:43