From 218d06c765f6645b3c889cca3b3916d5d5c37af7 Mon Sep 17 00:00:00 2001 From: Yurii Motov Date: Fri, 31 Oct 2025 14:16:54 +0100 Subject: [PATCH] Refactor `_get_multidict_value` for readability --- fastapi/dependencies/utils.py | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/fastapi/dependencies/utils.py b/fastapi/dependencies/utils.py index 1ea74cc83..26d4cefc9 100644 --- a/fastapi/dependencies/utils.py +++ b/fastapi/dependencies/utils.py @@ -731,24 +731,24 @@ def _get_multidict_value( value = values.getlist(alias) else: value = values.get(alias, None) - if ( - value is None - or ( - ( - isinstance( - field.field_info, - (params.Form, temp_pydantic_v1_params.Form) - ) or form_input - ) - and isinstance(value, str) # For type checks - and value == "" - ) - or (is_sequence_field(field) and len(value) == 0) - ): - if form_input or field.required: + + if form_input: + # Special handling for form inputs: + # Treat empty strings or empty lists as missing values + if ( + (isinstance(value, str) and value == "") + or (is_sequence_field(field) and len(value) == 0) + ): return None - else: - return deepcopy(field.default) + else: + # For non-form inputs: + # If value is None or an empty sequence, use the default (if not required) or + # treat as missing (if required) + if value is None or (is_sequence_field(field) and len(value) == 0): + if field.required: + return None + else: + return deepcopy(field.default) return value