File tree Expand file tree Collapse file tree 2 files changed +13
-3
lines changed Expand file tree Collapse file tree 2 files changed +13
-3
lines changed Original file line number Diff line number Diff line change @@ -93,9 +93,6 @@ def get_attribute(instance, attrs):
93
93
Also accepts either attribute lookup on objects or dictionary lookups.
94
94
"""
95
95
for attr in attrs :
96
- if instance is None :
97
- # Break out early if we get `None` at any point in a nested lookup.
98
- return None
99
96
try :
100
97
if isinstance (instance , collections .Mapping ):
101
98
instance = instance [attr ]
Original file line number Diff line number Diff line change @@ -411,6 +411,19 @@ def test_default_not_used_when_in_object(self):
411
411
serializer = self .Serializer (instance )
412
412
assert serializer .data == {'has_default' : 'def' , 'has_default_callable' : 'ghi' , 'no_default' : 'abc' }
413
413
414
+ def test_default_for_source_source (self ):
415
+ """
416
+ 'default="something"' should be used when a traversed attribute is missing from input.
417
+ """
418
+ class Serializer (serializers .Serializer ):
419
+ traversed = serializers .CharField (default = 'x' , source = 'traversed.attr' )
420
+
421
+ assert Serializer ({}).data == {'traversed' : 'x' }
422
+ assert Serializer ({'traversed' : {}}).data == {'traversed' : 'x' }
423
+ assert Serializer ({'traversed' : None }).data == {'traversed' : 'x' }
424
+
425
+ assert Serializer ({'traversed' : {'attr' : 'abc' }}).data == {'traversed' : 'abc' }
426
+
414
427
415
428
class TestCacheSerializerData :
416
429
def test_cache_serializer_data (self ):
You can’t perform that action at this time.
0 commit comments