我想在我的 env 文件中使用 dict 的字符串表示形式。它看起来像:
# .env a="a" b="b" c='{"s": 1, ...}'
我正在为其创建 pydantic BaseSetting 模型,并为 env 中的变量“c”创建模型:
class C_MODEL(BaseModel):
s: int
...
class Settings(BaseSettings):
class Config:
env_file = '.env'
env_file_encoding = 'utf-8'
a: str
b: str = "default"
c: C_MODEL = C_MODEL()
settings: Settings = Settings()
但是当我尝试举例时,我有:
pydantic.error_wrappers.ValidationError: 1 validation errors for C_MODEL
我认为 BaseModel 无法将字符串输入到 dict 并对 C_MODEL 类进行验证。
在这种情况下,如何从 env 文件中的字符串制作字典来制作 C_MODEL 结构并使用:
settings: Settings = Settings()
settings.c.s # == 1
在我的代码中?
我从 pydantic 文档中阅读了有关 SettingsBase 类的信息,但没有找到任何内容。
我还了解了 validator 和 root_validator,但无法用它编写任何工作代码。
P.S:环境文件的路径没有问题,只有其中的变量类型。
您可以:
只需将字段描述为字典,即可从编码的 JSON 环境变量中创建字典,如此处
所述class _Settings(BaseSettings):
c: dict
或者您可以直接创建一个类并将其用作类型提示,但不要忘记预先填充环境变量
example.py
class YourCustomField(BaseModel):
foo: str
baz: int
class _Settings(BaseSettings):
c: YourCustomField
.env
c={"foo":"bar", "baz": 1}