Closed nstonic closed 3 months ago
Thanks @nstonic for reporting this.
As the ALLOWED_HOSTS
field type is list[str]
, pydantic-settings
considers this field as a complex field and parses the value as JSON. So, you can have your desired behavior by removing the field validator and passing the env value as a valid JSON.
class DjangoSettings(BaseModel):
ALLOWED_HOSTS: list[str] = ["127.0.0.1", "localhost"]
class EnvSettings(BaseSettings):
DJ: DjangoSettings
model_config = SettingsConfigDict(
env_nested_delimiter="__",
case_sensitive=True,
extra="forbid",
)
Env: DJ__ALLOWED_HOSTS:'["127.0.0.1","localhost"]'
@hramezani Thank you. I'll keep that in mind. But that's not the problem. This code crashes at any attempt to use field_validator
Which code? The one that I provided? What error do you get?
Your code works if case_sensitive=False
, but it crashes with ValidationError if case_sensitive=True
Input should be a valid list [type=list_type, input_value='["127.0.0.1","localhost"]', input_type=str]```
@nstonic I created https://github.com/pydantic/pydantic-settings/pull/309 to fix the problem.
Please confirm that the fix works.
Confirmed! Thank you!
the fix has been released in new pydantic-settings 2.3.2
Example:
In envs:
DJ__ALLOWED_HOSTS: '127.0.0.1, localhost'
Crashes with an error: