Commit 98b32e9
committed
Final fix
Pydantic v2 copies the class-level attribute into the core schema as
the field default. Because ``setattr(new_class, field_name,
ExpressionProxy)``
runs *after* ``super().__new__()``, the core schema already contains the
parent class's ExpressionProxy as the default for ``pk`` (and any other
inherited field). We must rebuild the schema so that Pydantic reads the
newly-set class attribute instead of the stale inherited one.
Additionally, for ``pk`` specifically, we need to clear the
``ExpressionProxy`` from the ``FieldInfo`` default so that
``model_validate`` and ``model_validate_json`` don't try to validate
it as a string.1 parent a11d8c2 commit 98b32e9
3 files changed
Lines changed: 40 additions & 3 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1974 | 1974 | | |
1975 | 1975 | | |
1976 | 1976 | | |
1977 | | - | |
1978 | | - | |
| 1977 | + | |
| 1978 | + | |
| 1979 | + | |
| 1980 | + | |
| 1981 | + | |
| 1982 | + | |
| 1983 | + | |
| 1984 | + | |
| 1985 | + | |
| 1986 | + | |
| 1987 | + | |
| 1988 | + | |
| 1989 | + | |
| 1990 | + | |
| 1991 | + | |
1979 | 1992 | | |
1980 | 1993 | | |
1981 | 1994 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | | - | |
| 3 | + | |
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
80 | 80 | | |
81 | 81 | | |
82 | 82 | | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
83 | 107 | | |
84 | 108 | | |
85 | 109 | | |
| |||
0 commit comments