根据文档:
allow_mutation
是否模型是人工不可变的,即setattr
我有一个类:
class MyModel(BaseModel):
field1:int
class Config:
allow_mutation = True
如果我尝试动态添加一个字段:
model1 = MyModel(field1=1)
model1.field2 = 2
我得到这个错误:
File "pydantic/main.py", line 347, in pydantic.main.BaseModel.__setattr__
ValueError: "MyModel" object has no field "field2"
显然,使用setattr
方法也会导致同样的错误。
setattr(model1, 'field2', 2)
输出:
File "pydantic/main.py", line 347, in pydantic.main.BaseModel.__setattr__
ValueError: "MyModel" object has no field "field2"
我错过了什么?
您可以在类中使用Config对象并将extra
属性设置为"allow"或者在声明模型时使用它作为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)
"""
用extra.allow
举例回答问题
from pydantic import BaseModel, ValidationError, Extra
class Model(BaseModel, extra=Extra.allow):
a: str
my_model = Model(a="1")
my_model.b = "2"
# Model(a='1', b='2')