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

如何在Pydantic的validator方法中访问额外传入的kwargs参数

解决方案

你可以通过Pydantic内置的上下文传参功能实现需求,无需将tenantId加入模型字段,完全不会触发extra = Extra.forbid的校验规则。

Pydantic V1 版本实现

第一步:修改校验器,接收上下文参数

from pydantic import BaseModel, validator, Extra
from typing import List

class SendInvitePayloadValidator(BaseModel):
    emailId: List[str]
    role: str

    class Config:
        extra = Extra.forbid

    @validator('emailId')
    def validate_email(cls, emailID, values, **kwargs):
        # 从上下文获取tenantId
        tenant_id = kwargs.get('context', {}).get('tenantId')
        if not tenant_id:
            raise ValueError("缺少必要校验参数tenantId")
        # 此处编写你的邮箱校验逻辑,可直接使用tenant_id
        return emailID

第二步:调用校验时传入上下文

上下文参数需要单独传入,不要放到payload字典中,不会被识别为模型字段:

payload = {
    "emailId":['jeet@steinnlabs.com', 'jeet@dope.security'],
    "role":"Administrator",
}
# 单独传入context参数
validated_data = SendInvitePayloadValidator.parse_obj(
    payload, 
    context={"tenantId": "你需要传入的租户ID"}
)

Pydantic V2 版本实现

V2版本对上下文传参做了更规范的封装,使用ValidationInfo获取上下文参数:

第一步:修改校验器定义

from pydantic import BaseModel, ValidationInfo, field_validator
from typing import List

class SendInvitePayloadValidator(BaseModel):
    emailId: List[str]
    role: str

    model_config = {
        "extra": "forbid"
    }

    @field_validator('emailId')
    @classmethod
    def validate_email(cls, emailID: List[str], info: ValidationInfo):
        # 从上下文获取tenantId
        tenant_id = info.context.get('tenantId')
        if not tenant_id:
            raise ValueError("缺少必要校验参数tenantId")
        # 此处编写你的邮箱校验逻辑,可直接使用tenant_id
        return emailID

第二步:调用校验时传入上下文

payload = {
    "emailId":['jeet@steinnlabs.com', 'jeet@dope.security'],
    "role":"Administrator",
}
# 单独传入context参数
validated_data = SendInvitePayloadValidator.model_validate(
    payload,
    context={"tenantId": "你需要传入的租户ID"}
)

内容的提问来源于stack exchange,提问作者Jeet Patel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 20:27:03