使用 pydantic 设置管理,如何在主设置类的嵌套设置对象上加载环境变量?在下面的代码中,
sub_field
env 变量字段没有被加载。 field_one
和 field_two
加载良好。如何加载环境文件,以便将值向下传播到嵌套的 sub_settings
对象?
from typing import Optional
from pydantic import BaseSettings, Field
class SubSettings(BaseSettings):
sub_field: Optional[str] = Field(None, env='SUB_FIELD')
class Settings(BaseSettings):
field_one: Optional[str] = Field(None, env='FIELD_ONE')
field_two: Optional[int] = Field(None, env='FIELD_TWO')
sub_settings: SubSettings = SubSettings()
settings = Settings(_env_file='local.env')
在 docs 中有一些嵌套加载 pydantic env 变量的示例。
如果您愿意调整变量名称,一种策略是使用
env_nested_delimiter
来表示嵌套字段。
所以像这样的 local.env:
FIELD_ONE=one
FIELD_TWO=2
SUB_SETTINGS__SUB_FIELD=value
你应该可以通过这种方式加载设置
from typing import Optional
from pydantic import BaseModel, BaseSettings
class SubSettings(BaseModel):
# ^ Note that this inherits from BaseModel, not BaseSettings
sub_field: Optional[str]
class Settings(BaseSettings):
field_one: Optional[str]
field_two: Optional[int]
sub_settings: SubSettings
class Config:
env_nested_delimiter = '__'