根据文档:
允许突变
模型是否是假不可变的,即是否允许setattr (默认值:True)
好吧,我有一堂课:
class MyModel(BaseModel):
field1:int
class Config:
allow_mutation = True
Run Code Online (Sandbox Code Playgroud)
如果我尝试动态添加字段:
model1 = MyModel(field1=1)
model1.field2 = 2
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
File "pydantic/main.py", line 347, in pydantic.main.BaseModel.__setattr__
ValueError: "MyModel" object has no field "field2"
Run Code Online (Sandbox Code Playgroud)
显然,使用setattr方法会导致同样的错误。
File "pydantic/main.py", line 347, in pydantic.main.BaseModel.__setattr__
ValueError: "MyModel" object has no field "field2"
Run Code Online (Sandbox Code Playgroud)
输出:
setattr(model1, 'field2', 2)
Run Code Online (Sandbox Code Playgroud)
我在这里错过了什么?
小智 8
您可以在类中使用 Config 对象并将属性设置extra为“允许”或extra=Extra.allow在声明模型时将其用作 kwargs
文档中的示例:
from pydantic import BaseModel, ValidationError, Extra
class Model(BaseModel, extra=Extra.forbid):
a: str
try:
Model(a='spam', b='oh no')
except ValidationError as e:
print(e)
"""
1 validation error for Model
b
extra fields not permitted (type=value_error.extra)
"""
Run Code Online (Sandbox Code Playgroud)