Skip to content

Commit ad6725a

Browse files
committed
Fix required list fields ignoring empty default values
1 parent aa088d6 commit ad6725a

2 files changed

Lines changed: 8 additions & 4 deletions

File tree

src/datamodel_code_generator/model/pydantic/base_model.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,7 @@ def __str__(self) -> str: # noqa: PLR0912
220220
elif isinstance(discriminator, dict): # pragma: no cover
221221
data["discriminator"] = discriminator["propertyName"]
222222

223-
if self.required:
223+
if self.required and not self.has_default:
224224
default_factory = None
225225
elif self.default is not UNDEFINED and self.default is not None and "default_factory" not in data:
226226
default_factory = self._get_default_as_pydantic_model()
@@ -249,7 +249,7 @@ def __str__(self) -> str: # noqa: PLR0912
249249

250250
if self.use_annotated:
251251
field_arguments = self._process_annotated_field_arguments(field_arguments)
252-
elif self.required:
252+
elif self.required and not default_factory:
253253
field_arguments = ["...", *field_arguments]
254254
elif not default_factory:
255255
default_repr = repr_set_sorted(self.default) if isinstance(self.default, set) else repr(self.default)

tests/data/expected/main/jsonschema/has_default_value.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,15 @@ class Pet(BaseModel):
2525

2626

2727
class Family(BaseModel):
28-
__root__: list[ID]
28+
__root__: list[ID] = Field(
29+
default_factory=lambda: [ID.parse_obj(v) for v in ['abc', 'efg']]
30+
)
2931

3032

3133
class FamilyPets(BaseModel):
32-
__root__: list[Pet]
34+
__root__: list[Pet] = Field(
35+
default_factory=lambda: [Pet.parse_obj(v) for v in ['taro', 'shiro']]
36+
)
3337

3438

3539
class Person(BaseModel):

0 commit comments

Comments
 (0)