pydantic.errors.PydanticSchemaGenerationError: 无法为 <class 'decimal.Decimal'> 生成 pydantic-core schema。请在 model_config 中设置 `arbitrary_types_allowed=True` 以忽略此错误,或实现 `__get_pydantic_core_schema__`。
pydantic.errors.PydanticSchemaGenerationError: Unable to generate pydantic-core schema for <class 'decimal.Decimal'>. Set `arbitrary_types_allowed=True` in the model_config to ignore this error or implement `__get_pydantic_core_schema__` on your type to fully support it.
ID: python/pydantic-arbitrary-types-not-allowed
版本兼容性
| 版本 | 状态 | 引入 | 弃用 | 备注 |
|---|---|---|---|---|
| 2.x | active | — | — | — |
根因分析
字段使用了 Pydantic 无法内省的类型(自定义类或缺少 schema 钩子的第三方类型),且未启用 `arbitrary_types_allowed`。
English
A field uses a class Pydantic cannot introspect (a custom class or third-party type lacking a schema hook), and `arbitrary_types_allowed` is not enabled.
解决方案
-
90% 成功率
Enable it: `model_config = ConfigDict(arbitrary_types_allowed=True)` and add a `field_validator` for the type.
-
85% 成功率
Implement `__get_pydantic_core_schema__` on the custom class to provide a proper schema.
无效尝试
常见但无效的做法:
-
50% 失败
Adding `arbitrary_types_allowed=True` without `isinstance` checks means the field is never validated, leading to silent bad data.
-
85% 失败
Subclassing the third-party type does not help; Pydantic still cannot introspect it.