diff --git a/changes/4253-sergeytsaplin.md b/changes/4253-sergeytsaplin.md new file mode 100644 index 0000000000..6cdee03ca6 --- /dev/null +++ b/changes/4253-sergeytsaplin.md @@ -0,0 +1 @@ +Allow empty string aliases by using a `alias is not None` check, rather than `bool(alias)` diff --git a/pydantic/fields.py b/pydantic/fields.py index 600ee53644..7b55bcf637 100644 --- a/pydantic/fields.py +++ b/pydantic/fields.py @@ -148,7 +148,7 @@ def __init__(self, default: Any = Undefined, **kwargs: Any) -> None: self.default = default self.default_factory = kwargs.pop('default_factory', None) self.alias = kwargs.pop('alias', None) - self.alias_priority = kwargs.pop('alias_priority', 2 if self.alias else None) + self.alias_priority = kwargs.pop('alias_priority', 2 if self.alias is not None else None) self.title = kwargs.pop('title', None) self.description = kwargs.pop('description', None) self.exclude = kwargs.pop('exclude', None) @@ -394,8 +394,8 @@ def __init__( ) -> None: self.name: str = name - self.has_alias: bool = bool(alias) - self.alias: str = alias or name + self.has_alias: bool = alias is not None + self.alias: str = alias if alias is not None else name self.type_: Any = convert_generics(type_) self.outer_type_: Any = type_ self.class_validators = class_validators or {} diff --git a/tests/test_aliases.py b/tests/test_aliases.py index 24caa9ed62..53a08dc0a1 100644 --- a/tests/test_aliases.py +++ b/tests/test_aliases.py @@ -335,3 +335,13 @@ def alias_generator(x): 'd_config_parent', 'e_generator_child', ] + + +def test_empty_string_alias(): + class Model(BaseModel): + empty_string_key: int = Field(alias='') + + data = {'': 123} + m = Model(**data) + assert m.empty_string_key == 123 + assert m.dict(by_alias=True) == data