1717 DataModel ,
1818 DataModelFieldBase ,
1919)
20+ from datamodel_code_generator .model ._types import WrappedDefault
2021from datamodel_code_generator .model .base import UNDEFINED
2122from datamodel_code_generator .model .pydantic .imports import (
2223 IMPORT_ANYURL ,
@@ -122,6 +123,8 @@ def _get_strict_field_constraint_value(self, constraint: str, value: Any) -> Any
122123 return int (value )
123124
124125 def _get_default_as_pydantic_model (self ) -> str | None :
126+ if isinstance (self .default , WrappedDefault ):
127+ return f"lambda :{ self .default !r} "
125128 for data_type in self .data_type .data_types or (self .data_type ,):
126129 # TODO: Check nested data_types
127130 if data_type .is_dict :
@@ -141,15 +144,18 @@ def _get_default_as_pydantic_model(self) -> str | None:
141144 f"{ self ._PARSE_METHOD } (v) for v in { self .default !r} ]"
142145 )
143146 elif data_type .reference and isinstance (data_type .reference .source , BaseModelBase ):
147+ source = data_type .reference .source
148+ is_root_model = hasattr (source , "BASE_CLASS" ) and source .BASE_CLASS == "pydantic.RootModel"
144149 if self .data_type .is_union :
145150 if not isinstance (self .default , (dict , list )):
151+ if not is_root_model :
152+ continue
153+ elif isinstance (self .default , dict ) and any (dt .is_dict for dt in self .data_type .data_types ):
146154 continue
147- if isinstance (self .default , dict ) and any (dt .is_dict for dt in self .data_type .data_types ):
148- continue
149- return (
150- f"lambda :{ data_type .alias or data_type .reference .source .class_name } ."
151- f"{ self ._PARSE_METHOD } ({ self .default !r} )"
152- )
155+ class_name = data_type .alias or source .class_name
156+ if is_root_model :
157+ return f"lambda :{ class_name } ({ self .default !r} )"
158+ return f"lambda :{ class_name } .{ self ._PARSE_METHOD } ({ self .default !r} )"
153159 return None
154160
155161 def _process_data_in_str (self , data : dict [str , Any ]) -> None :
0 commit comments