Fix Form model fields_set for omitted defaults by Sebastianhayashi · Pull Request #15027 · fastapi/fastapi
Summary
Fix inconsistent model_fields_set behavior between JSON body and Form() model parsing.
For single non-embedded Form() parameters typed as a Pydantic model, omitted default fields were being treated as explicitly provided and showed up in model_fields_set.
What changed
- Added regression test in
tests/test_forms_single_model.py:test_default_field_not_marked_as_set_for_form_model
- Updated
fastapi/dependencies/utils.pyinrequest_body_to_args:- Track which form fields are actually present.
- After successful model validation, set
__pydantic_fields_set__to only those provided fields.
Validation
pytest -q \ tests/test_forms_single_model.py::test_default_field_not_marked_as_set_for_form_model \ tests/test_forms_single_model.py::test_no_data \ tests/test_forms_single_model.py::test_defaults
Result: 3 passed
Related to #13399.