【发布时间】:2022-08-16 19:32:50
【问题描述】:
根据docs:
允许突变
模型是否是假不可变的,即是否设置允许(默认值:True)
好吧,我有一堂课:
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\"我在这里错过了什么?
-
setattr呼叫不应该在model1上而不是field2,即setattr(model1, \'field2\', 2)上吗? -
问题中的错字:已修复!谢谢@JoshClark。问题当然还在这里
-
是否允许 setattr现存的领域?即field1,而不是field2。尝试将其设置为 false,创建一个实例,然后在该实例上再次设置 field1。那可能是它控制而不是添加随意的属性。
-
@JLPeyret 这是否意味着不可能动态创建新字段?
-
如果我的建议是正确的,那么是的,这可能意味着。我广泛使用 pydantic,但还不是很复杂。但它似乎不太适合使用动态代码,否则我会做很多事情。
dynvars : dict[str,Any] = field(factory=dict)不确定工厂语法并使用额外的随机字段进行变异怎么办?