diff --git a/fastapi/_compat/v2.py b/fastapi/_compat/v2.py index b000679a5..eb5543fc9 100644 --- a/fastapi/_compat/v2.py +++ b/fastapi/_compat/v2.py @@ -399,13 +399,14 @@ def get_flat_models_from_model( def get_flat_models_from_annotation( - annotation: Any, known_models: Union[TypeModelSet, None] = None + annotation: Any, known_models: TypeModelSet ) -> TypeModelSet: - known_models = known_models or set() origin = get_origin(annotation) if origin is not None: for arg in get_args(annotation): if lenient_issubclass(arg, (BaseModel, Enum)) and arg not in known_models: + if arg in known_models: + continue known_models.add(arg) if lenient_issubclass(arg, BaseModel): get_flat_models_from_model(arg, known_models=known_models) @@ -425,6 +426,8 @@ def get_flat_models_from_field( get_flat_models_from_model(field_type, known_models=known_models) elif lenient_issubclass(field_type, Enum): known_models.add(field_type) + else: + get_flat_models_from_annotation(field_type, known_models=known_models) return known_models