pydanticで未定義のフィールドを指定した場合の動作をまとめました。
概要
Extra.allow: 未定義のフィールドを指定するとそのフィールドが追加される
Extra.ignore: 未定義のフィールドを指定してもそのフィールドは無視される
Extra.forbid: 未定義のフィールドを指定するとValidationErrorが発生
BaseModelのデフォルトはExtra.ignore, BaseSettingsのデフォルトはExtra.forbidです。
Extra.ignore
class ModelA(BaseModel):
    x: float = Field(default=0.0)
    y: float = Field(default=0.0)
    z: float = Field(default=0.0)
print(ModelA(x=1, y=2, z=3, aaa=4))
# x=1.0 y=2.0 z=3.0Extra.allow
class ModelA(BaseModel, extra=Extra.allow):
    x: float = Field(default=0.0)
    y: float = Field(default=0.0)
    z: float = Field(default=0.0)
print(ModelA(x=1, y=2, z=3, aaa=4))
# x=1.0 y=2.0 z=3.0 aaa=4Extra.forbid
class ModelA(BaseModel, extra=Extra.forbid):
    x: float = Field(default=0.0)
    y: float = Field(default=0.0)
    z: float = Field(default=0.0)
print(ModelA(x=1, y=2, z=3, aaa=4))Traceback (most recent call last):
  File "./model.py", line 9, in <module>
    print(ModelA(x=1, y=2, z=3, aaa=4))
  File "/Users/kuro/Library/Python/3.8/lib/python/site-packages/pydantic/main.py", line 341, in __init__
    raise validation_error
pydantic.error_wrappers.ValidationError: 1 validation error for ModelA
aaa
  extra fields not permitted (type=value_error.extra) 
  
  
  
  

コメント