@@ -390,18 +390,36 @@ class SubModel(BaseModel):
390
390
flag: bool = False
391
391
392
392
393
- class Settings (BaseSettings ):
393
+ class SettingsPartialUpdate (BaseSettings ):
394
394
model_config = SettingsConfigDict(
395
395
env_nested_delimiter = ' __' , nested_model_default_partial_update = True
396
396
)
397
397
398
- nested_model: SubModel = SubModel()
398
+ nested_model: SubModel = SubModel(val = 1 )
399
+
400
+
401
+ class SettingsNoPartialUpdate (BaseSettings ):
402
+ model_config = SettingsConfigDict(
403
+ env_nested_delimiter = ' __' , nested_model_default_partial_update = False
404
+ )
405
+
406
+ nested_model: SubModel = SubModel(val = 1 )
399
407
400
408
401
409
# Apply a partial update to the default object using environment variables
402
410
os.environ[' NESTED_MODEL__FLAG' ] = ' True'
403
411
404
- assert Settings().model_dump() == {' nested_model' : {' val' : 0 , ' flag' : True }}
412
+ # When partial update is enabled, the existing SubModel instance is updated
413
+ # with nested_model.flag=True change
414
+ assert SettingsPartialUpdate().model_dump() == {
415
+ ' nested_model' : {' val' : 1 , ' flag' : True }
416
+ }
417
+
418
+ # When partial update is disabled, a new SubModel instance is instantiated
419
+ # with nested_model.flag=True change
420
+ assert SettingsNoPartialUpdate().model_dump() == {
421
+ ' nested_model' : {' val' : 0 , ' flag' : True }
422
+ }
405
423
```
406
424
407
425
## Dotenv (.env) support
0 commit comments