Skip to content

Commit 1feec81

Browse files
committed
Let attribute default to field name
1 parent 43b0bc7 commit 1feec81

3 files changed

Lines changed: 14 additions & 4 deletions

File tree

src/marshmallow/fields.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -378,6 +378,7 @@ def _bind_to_schema(self, field_name, schema):
378378
self.parent = self.parent or schema
379379
self.name = self.name or field_name
380380
self.data_key = self.data_key if self.data_key is not None else field_name
381+
self.attribute = self.attribute if self.attribute is not None else field_name
381382
self.root = self.root or (
382383
self.parent.root if isinstance(self.parent, FieldABC) else self.parent
383384
)

src/marshmallow/schema.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -663,7 +663,7 @@ def _deserialize(
663663
index=index,
664664
)
665665
if value is not missing:
666-
key = field_obj.attribute or attr_name
666+
key = field_obj.attribute
667667
set_value(ret_d, key, value)
668668
if unknown != EXCLUDE:
669669
fields = {field_obj.data_key for field_obj in self.load_fields.values()}
@@ -991,7 +991,7 @@ def _init_fields(self) -> None:
991991
"Check the following field names and "
992992
"data_key arguments: {}".format(list(data_keys_duplicates))
993993
)
994-
load_attributes = [obj.attribute or name for name, obj in load_fields.items()]
994+
load_attributes = [obj.attribute for obj in load_fields.values()]
995995
if len(load_attributes) != len(set(load_attributes)):
996996
attributes_duplicates = {
997997
x for x in load_attributes if load_attributes.count(x) > 1
@@ -1105,7 +1105,7 @@ def _invoke_field_validators(self, *, error_store: ErrorStore, data, many: bool)
11051105
if many:
11061106
for idx, item in enumerate(data):
11071107
try:
1108-
value = item[field_obj.attribute or field_name]
1108+
value = item[field_obj.attribute]
11091109
except KeyError:
11101110
pass
11111111
else:
@@ -1120,7 +1120,7 @@ def _invoke_field_validators(self, *, error_store: ErrorStore, data, many: bool)
11201120
data[idx].pop(field_name, None)
11211121
else:
11221122
try:
1123-
value = data[field_obj.attribute or field_name]
1123+
value = data[field_obj.attribute]
11241124
except KeyError:
11251125
pass
11261126
else:

tests/test_fields.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,15 @@ class MySchema(Schema):
101101
assert schema_fields["field_1"].data_key == "field_one"
102102
assert schema_fields["field_2"].data_key == "field_2"
103103

104+
def test_attribute_defaults_to_field_name(self):
105+
class MySchema(Schema):
106+
field_1 = fields.String(attribute="field_one")
107+
field_2 = fields.String()
108+
109+
schema_fields = MySchema().fields
110+
assert schema_fields["field_1"].attribute == "field_one"
111+
assert schema_fields["field_2"].attribute == "field_2"
112+
104113

105114
class TestParentAndName:
106115
class MySchema(Schema):

0 commit comments

Comments
 (0)