diff --git a/fastapi/_compat.py b/fastapi/_compat.py index 2233fe33c..2aef71d43 100644 --- a/fastapi/_compat.py +++ b/fastapi/_compat.py @@ -223,7 +223,21 @@ if PYDANTIC_V2: ) and not isinstance(field.field_info, params.Body) def is_sequence_field(field: ModelField) -> bool: - return field_annotation_is_sequence(field.field_info.annotation) + return field_annotation_is_sequence( + field.field_info.annotation + ) or field_annotation_is_optional_sequence(field.field_info.annotation) + + def field_annotation_is_optional_sequence( + annotation: Union[Type[Any], None] + ) -> bool: + origin = get_origin(annotation) + if origin is Union: + args = get_args(annotation) + first_argument = args[0] + if hasattr(first_argument, "__origin__"): + if first_argument.__origin__ in sequence_types: + return True + return False def is_scalar_sequence_field(field: ModelField) -> bool: return field_annotation_is_scalar_sequence(field.field_info.annotation)