在模型json模式中获取validation_alias而不是字段名称

问题描述 投票:0回答:1

我正在使用 Padantic v2 创建模型,然后将 model_json_schema 提供给其他需要确保提供所有必需参数的团队。

有没有办法获取 model_json_schema 中的validation_alias而不是字段名称?

例如,这是我的模型:

from pydantic_settings import BaseSettings, SettingsConfigDict
from pydantic import Field, AliasPath

class Config(BaseSettings):
   model_config = SettingsConfigDict(validation_alias=lambda field_name: field_name.lower())
   a: int = Field(..., validation_alias=AliasPath("b", "c")) 

schema = Config.model_json_schema()

当前架构:

{
    "additionalProperties": false,
    "properties": {
        "a": {
            "title": "A",
            "type": "integer"
        }
    },
    "required": [
        "a"
    ],
    "title": "Config",
    "type": "object"
}

“a”在我初始化模型的源中不存在, 例如,这是来源:{“b”:{“c”:3}} 另一方面,我想像这样访问“a”:

model.a

而不是

model.b.c

这是所需的架构:

{
    "$defs": {
        "ConfigB": {
            "additionalProperties": false,
            "properties": {
                "c": {
                    "title": "C",
                    "type": "integer"
                }
            },
            "required": [
                "c"
            ],
            "title": "ConfigB",
            "type": "object"
        }
    },
    "additionalProperties": false,
    "properties": {
        "b": {
            "$ref": "#/$defs/ConfigB"
        }
    },
    "required": [
        "b"
    ],
    "title": "Config",
    "type": "object"
}

提前致谢

validation jsonschema pydantic-v2 pydantic-settings
1个回答
0
投票

我使用@compulated_field而不是使用validation_alias=AliasPath(...),如下所示:

from pydantic_settings import BaseSettings, SettingsConfigDict
from pydantic import Field, AliasPath

class BModel(BaseSettings):
    c: int

class Config(BaseSettings):
    model_config = SettingsConfigDict(validation_alias=lambda field_name: field_name.lower())
    b: BModel

    @computed_field
    @property
    def a(self) -> int:
       return self.b.c

schema = Config.model_json_schema()

schema

{
    "$defs": {
        "BModel": {
            "additionalProperties": false,
            "properties": {
                "c": {
                    "title": "C",
                    "type": "integer"
                }
            },
            "required": [
                "c"
            ],
            "title": "BModel",
            "type": "object"
        }
    },
    "additionalProperties": false,
    "properties": {
        "b": {
            "$ref": "#/$defs/BModel"
        }
    },
    "required": [
        "b"
    ],
    "title": "Config",
    "type": "object"
}
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.