From 53b0ed1958753f5c2625d744e572497119f152f7 Mon Sep 17 00:00:00 2001 From: Koudai Aono Date: Mon, 12 Jan 2026 14:29:25 +0000 Subject: [PATCH 1/2] Fix RootModel default value not being applied --- docs/cli-reference/model-customization.md | 2 +- docs/cli-reference/template-customization.md | 2 +- .../model/template/pydantic/BaseModel_root.jinja2 | 2 +- .../model/template/pydantic_v2/RootModel.jinja2 | 2 +- .../main/jsonschema/all_of_any_of_base_class_ref.py | 2 +- tests/data/expected/main/jsonschema/has_default_value.py | 6 +++--- tests/data/expected/main/openapi/nullable.py | 2 +- .../data/expected/main/openapi/nullable_strict_nullable.py | 2 +- .../openapi/nullable_strict_nullable_use_union_operator.py | 2 +- tests/data/expected/main/openapi/referenced_default.py | 2 +- .../main/openapi/referenced_default_use_annotated.py | 2 +- tests/data/expected/main/openapi/use_default_kwarg.py | 2 +- 12 files changed, 14 insertions(+), 14 deletions(-) diff --git a/docs/cli-reference/model-customization.md b/docs/cli-reference/model-customization.md index 3921fec1a..bd4e2219e 100644 --- a/docs/cli-reference/model-customization.md +++ b/docs/cli-reference/model-customization.md @@ -5029,7 +5029,7 @@ where optional fields have defaults but cannot accept `None` values. class Id(BaseModel): - __root__: int + __root__: int = 1 class Description(BaseModel): diff --git a/docs/cli-reference/template-customization.md b/docs/cli-reference/template-customization.md index 807f419bc..b668ce88a 100644 --- a/docs/cli-reference/template-customization.md +++ b/docs/cli-reference/template-customization.md @@ -2625,7 +2625,7 @@ helps maintain consistency with codebases that prefer double-quote formatting. class Zoom(BaseModel): - __root__: confloat(ge=0.0, le=25.0) + __root__: confloat(ge=0.0, le=25.0) = 0 ``` --- diff --git a/src/datamodel_code_generator/model/template/pydantic/BaseModel_root.jinja2 b/src/datamodel_code_generator/model/template/pydantic/BaseModel_root.jinja2 index 4a6d4ad7d..47cc4a9a2 100644 --- a/src/datamodel_code_generator/model/template/pydantic/BaseModel_root.jinja2 +++ b/src/datamodel_code_generator/model/template/pydantic/BaseModel_root.jinja2 @@ -24,7 +24,7 @@ class {{ class_name }}({{ base_class }}):{% if comment is defined %} # {{ comme {%- else %} __root__: {{ field.type_hint }} {%- endif %} - {%- if not field.has_default_factory_in_field and not (field.required or (field.represented_default == 'None' and field.strip_default_none)) + {%- if not field.has_default_factory_in_field and not ((field.required and not field.has_default) or (field.represented_default == 'None' and field.strip_default_none)) %} = {{ field.represented_default }} {%- endif -%} {%- endif %} diff --git a/src/datamodel_code_generator/model/template/pydantic_v2/RootModel.jinja2 b/src/datamodel_code_generator/model/template/pydantic_v2/RootModel.jinja2 index af5de33b7..0d108a4a0 100644 --- a/src/datamodel_code_generator/model/template/pydantic_v2/RootModel.jinja2 +++ b/src/datamodel_code_generator/model/template/pydantic_v2/RootModel.jinja2 @@ -42,7 +42,7 @@ class {{ class_name }}({{ base_class }}{%- if fields -%}[{{get_type_hint(fields, {%- else %} root: {{ field.type_hint }} {%- endif %} - {%- if not field.has_default_factory_in_field and not (field.required or (field.represented_default == 'None' and field.strip_default_none)) + {%- if not field.has_default_factory_in_field and not ((field.required and not field.has_default) or (field.represented_default == 'None' and field.strip_default_none)) %} = {{ field.represented_default }} {%- endif -%} {%- endif %} diff --git a/tests/data/expected/main/jsonschema/all_of_any_of_base_class_ref.py b/tests/data/expected/main/jsonschema/all_of_any_of_base_class_ref.py index 0d4554b15..5090f4858 100644 --- a/tests/data/expected/main/jsonschema/all_of_any_of_base_class_ref.py +++ b/tests/data/expected/main/jsonschema/all_of_any_of_base_class_ref.py @@ -75,4 +75,4 @@ class Pitch(BaseModel): class Zoom(BaseModel): - __root__: confloat(ge=0.0, le=25.0) + __root__: confloat(ge=0.0, le=25.0) = 0 diff --git a/tests/data/expected/main/jsonschema/has_default_value.py b/tests/data/expected/main/jsonschema/has_default_value.py index c38cbcd80..fa29c4440 100644 --- a/tests/data/expected/main/jsonschema/has_default_value.py +++ b/tests/data/expected/main/jsonschema/has_default_value.py @@ -17,7 +17,7 @@ class TeamType(Enum): class ID(BaseModel): - __root__: str + __root__: str = 'abc' class Pet(BaseModel): @@ -25,11 +25,11 @@ class Pet(BaseModel): class Family(BaseModel): - __root__: list[ID] + __root__: list[ID] = ['abc', 'efg'] class FamilyPets(BaseModel): - __root__: list[Pet] + __root__: list[Pet] = ['taro', 'shiro'] class Person(BaseModel): diff --git a/tests/data/expected/main/openapi/nullable.py b/tests/data/expected/main/openapi/nullable.py index ea196028c..9ea5e811d 100644 --- a/tests/data/expected/main/openapi/nullable.py +++ b/tests/data/expected/main/openapi/nullable.py @@ -57,7 +57,7 @@ class Email(BaseModel): class Id(BaseModel): - __root__: int + __root__: int = 1 class Description(BaseModel): diff --git a/tests/data/expected/main/openapi/nullable_strict_nullable.py b/tests/data/expected/main/openapi/nullable_strict_nullable.py index ce02a8747..fccc52222 100644 --- a/tests/data/expected/main/openapi/nullable_strict_nullable.py +++ b/tests/data/expected/main/openapi/nullable_strict_nullable.py @@ -57,7 +57,7 @@ class Email(BaseModel): class Id(BaseModel): - __root__: int + __root__: int = 1 class Description(BaseModel): diff --git a/tests/data/expected/main/openapi/nullable_strict_nullable_use_union_operator.py b/tests/data/expected/main/openapi/nullable_strict_nullable_use_union_operator.py index ce02a8747..fccc52222 100644 --- a/tests/data/expected/main/openapi/nullable_strict_nullable_use_union_operator.py +++ b/tests/data/expected/main/openapi/nullable_strict_nullable_use_union_operator.py @@ -57,7 +57,7 @@ class Email(BaseModel): class Id(BaseModel): - __root__: int + __root__: int = 1 class Description(BaseModel): diff --git a/tests/data/expected/main/openapi/referenced_default.py b/tests/data/expected/main/openapi/referenced_default.py index 257d7c0b0..04ce050c6 100644 --- a/tests/data/expected/main/openapi/referenced_default.py +++ b/tests/data/expected/main/openapi/referenced_default.py @@ -8,7 +8,7 @@ class ModelSettingB(RootModel[confloat(ge=0.0, le=10.0)]): - root: confloat(ge=0.0, le=10.0) + root: confloat(ge=0.0, le=10.0) = 5 class Model(BaseModel): diff --git a/tests/data/expected/main/openapi/referenced_default_use_annotated.py b/tests/data/expected/main/openapi/referenced_default_use_annotated.py index e2b6696d5..05670f70e 100644 --- a/tests/data/expected/main/openapi/referenced_default_use_annotated.py +++ b/tests/data/expected/main/openapi/referenced_default_use_annotated.py @@ -10,7 +10,7 @@ class ModelSettingB(RootModel[float]): - root: Annotated[float, Field(ge=0.0, le=10.0)] + root: Annotated[float, Field(ge=0.0, le=10.0)] = 5 class Model(BaseModel): diff --git a/tests/data/expected/main/openapi/use_default_kwarg.py b/tests/data/expected/main/openapi/use_default_kwarg.py index 9d264d5ff..539f32cb8 100644 --- a/tests/data/expected/main/openapi/use_default_kwarg.py +++ b/tests/data/expected/main/openapi/use_default_kwarg.py @@ -57,7 +57,7 @@ class Email(BaseModel): class Id(BaseModel): - __root__: int + __root__: int = 1 class Description(BaseModel): From 0d9ff7947dd8979abe86ae97fb49a85538cc2867 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 12 Jan 2026 14:30:03 +0000 Subject: [PATCH 2/2] docs: update llms.txt files Generated by GitHub Actions --- docs/llms-full.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/llms-full.txt b/docs/llms-full.txt index 405e938c1..3a8bf1abf 100644 --- a/docs/llms-full.txt +++ b/docs/llms-full.txt @@ -6182,7 +6182,7 @@ where optional fields have defaults but cannot accept `None` values. class Id(BaseModel): - __root__: int + __root__: int = 1 class Description(BaseModel): @@ -19238,7 +19238,7 @@ helps maintain consistency with codebases that prefer double-quote formatting. class Zoom(BaseModel): - __root__: confloat(ge=0.0, le=25.0) + __root__: confloat(ge=0.0, le=25.0) = 0 ``` ---