Skip to content

Commit bbe48b4

Browse files
committed
Fix recursive extras.
1 parent 6043eb1 commit bbe48b4

File tree

3 files changed

+44
-2
lines changed

3 files changed

+44
-2
lines changed

django_qserializer/serialization.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ def prepare_objects(self, objs):
8080
def _serialize_object(self, obj):
8181
serialized = self.serialize_object(obj)
8282
for extra in self.extra.values():
83-
serialized.update(extra.serialize_object(obj))
83+
serialized.update(extra._serialize_object(obj))
8484
return serialized
8585

8686
def serialize_object(self, obj):

django_qserializer/tests/test_serializer.py

+42
Original file line numberDiff line numberDiff line change
@@ -89,3 +89,45 @@ def serialize_object(self, obj):
8989

9090
with django_assert_num_queries(0):
9191
assert expected == next(serialize([bus]))
92+
93+
94+
def test_extras_recursive(bus_fixture, db, django_assert_num_queries):
95+
def city(obj):
96+
return {
97+
'city': 'SJK',
98+
}
99+
100+
class Attr(BaseSerializer):
101+
extra = {
102+
'city': city,
103+
}
104+
select_related = ['company']
105+
106+
def serialize_object(self, obj):
107+
return {
108+
'myattr': obj.company.name
109+
}
110+
111+
class S(BaseSerializer):
112+
extra = {
113+
'myattr': Attr(extra=['city']),
114+
}
115+
116+
def serialize_object(self, obj):
117+
return {
118+
'plate': obj.plate,
119+
}
120+
121+
serializer = S(extra=['myattr'])
122+
123+
with django_assert_num_queries(1):
124+
bus = Bus.objects.to_serialize(serializer).first()
125+
126+
expected = {
127+
'plate': 'BUSER',
128+
'myattr': 'Hurricane Cart',
129+
'city': 'SJK',
130+
}
131+
132+
with django_assert_num_queries(0):
133+
assert expected == bus.serialize()

setup.cfg

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[metadata]
22
name = django_qserializer
3-
version = 0.2.3
3+
version = 0.2.4
44
url = https://github.com/buserbrasil/django-qserializer
55
license = MIT
66
author = Iuri de Silvio

0 commit comments

Comments
 (0)