python runtime_error ai_generated true

PydanticDeprecatedSince20: `__fields__` is deprecated; use `model_fields` instead. Deprecated in Pydantic V2.0 to be removed in V3.0.

ID: python/pydantic-v2-model-fields-deprecated

Also available as: JSON · Markdown · 中文
80%Fix Rate
86%Confidence
0Evidence
2024-01-20First Seen

Version Compatibility

VersionStatusIntroducedDeprecatedNotes
2.x active — — —

Root Cause

Code written for Pydantic v1 accesses model.__fields__ or .dict()/.json() which are deprecated in v2 in favor of model_fields, model_dump(), model_dump_json().

generic

中文

为 Pydantic v1 编写的代码访问 model.__fields__ 或 .dict()/.json(),这些在 v2 中已弃用,应改用 model_fields、model_dump()、model_dump_json()。

Workarounds

  1. 95% success
    Replace attribute access:
    
    # v1
    for name, field in User.__fields__.items(): ...
    # v2
    for name, field in User.model_fields.items(): ...
  2. 95% success
    Replace serialization methods:
    
    obj.dict()      -> obj.model_dump()
    obj.json()      -> obj.model_dump_json()
    obj.parse_obj(d) -> obj.model_validate(d)

Dead Ends

Common approaches that don't work:

  1. 65% fail

    Hides the deprecation but the code still breaks when upgrading to v3 or when stderr is treated as failure in CI.

  2. 75% fail

    Conflicts with libraries (FastAPI 0.100+, LangChain) that require v2, causing install errors.