运行脚本时出现错误,导致我进入此文档页面:
model_config
用作模型字段
model_config
当用作字段名称时会出现此错误。
显然,在 Pydantic 中将其用作模型字段是错误的model_config
。但是,我在其他代码中也这样使用它,并没有出现任何问题。
是model_config
Pydantic 后续版本中的关键字吗?
是否有可能有一个 pydantic 模型,我可以在运行时以某种方式传递其中一个变量的数据类型?我尝试过阅读,但我无法理解 Pydantic 的工作原理。我本质上需要数据类型强制,在分配期间也是如此。我希望有一些东西可以做这样的事情:
class State(BaseModel):
datatype: type,
value: self.datatype,
getter: Callable
setter: Callable
state1 = State(bool, True, get_state1, set_state1)
state2 = State(int, 0, get_state2, set_state2)
state1.value = 7 # this should throw error, expected datatype of state1 is bool
我想获取已分别在 obj (基本模型)中使用嵌套 obj 初始化的属性列表。
我有下一个代码:
from pydantic import BaseModel
class Parameters(BaseModel):
id: int
sender_id: int = None
class Options(BaseModel):
notification: bool = False
protect: bool = False
parameters: Parameters = None
opt = Options(protect=True, parameters=Parameters(id=1))
print(opt.model_fields_set)
# >>> {'protect', 'parameters'}
print(opt.model_dump(include=opt.model_fields_set)) # or
# print(opt.model_dump(include=opt.model_fields_set | {"id"}))
# >>> {'protect': True, 'parameters': {'id': 1, 'sender_id': None}}
我只想获取我明确指定的那些属性{'protect': True, 'parameters': {'id': 1}}
。
目前,我已经实现了一个函数,递归地遍历并收集必要的属性
def initialized_fields(cls):
init_fields = {}
for field in cls.model_fields_set:
attr = getattr(cls, field)
if isinstance(attr, BaseModel):
init_fields[field] = initialized_fields(attr)
else:
init_fields[field] = attr
return init_fields
请告诉我该怎么做?
谢谢。
我正在尝试从 .env 文件读取变量,如下所示:
A = 'aaa'
B = 'bbb'
为了读取变量,我在 test_vars.py 中创建 Settings() 类:
from pydantic_settings import BaseSettings, SettingsConfigDict
class Settings(BaseSettings):
a: str
b: str
model_config = SettingsConfigDict(env_file='.env', env_file_encoding='utf-8')
config = Settings()
这两个文件位于同一目录中。
当尝试创建 Settings() 类时,我收到此错误:
pydantic_core._pydantic_core.ValidationError: 2 validation errors for Settings
a
Field required [type=missing, input_value={}, input_type=dict]
也许我应该以某种方式编辑 .env,但我不确定。