Initial Checks
Description
The behaviour of model_fields_set is confusing: If I give an extra field at model creation, it is included in model_fields_set, but if I set it later, it is not.
My expectation is that model_fields_set should always be a subset of model_fields.keys() and never include extra items.
Example Code
from pydantic import BaseModel, ConfigDict
class MRE(BaseModel):
model_config = ConfigDict(extra="allow")
actual_field: int
a = MRE.model_validate({"actual_field": 1, "extra_field": 2})
print(a.model_fields_set) # {'actual_field', 'extra_field'}
print(a.model_extra) # {'extra_field': 2}
a.double_extra_field = 3
print(a.model_fields_set) # {'actual_field', 'extra_field'}
print(a.model_extra) # {'extra_field': 2, 'double_extra_field': 3}
Python, Pydantic & OS Version
pydantic version: 2.9.2
pydantic-core version: 2.23.4
pydantic-core build: profile=release pgo=false
install path: /opt/miniconda3/envs/genie/lib/python3.11/site-packages/pydantic
python version: 3.11.10 (main, Oct 3 2024, 02:26:51) [Clang 14.0.6 ]
platform: macOS-14.7-arm64-arm-64bit
related packages: typing_extensions-4.12.2
commit: unknown
Initial Checks
Description
The behaviour of
model_fields_setis confusing: If I give an extra field at model creation, it is included inmodel_fields_set, but if I set it later, it is not.My expectation is that
model_fields_setshould always be a subset ofmodel_fields.keys()and never include extra items.Example Code
Python, Pydantic & OS Version