File tree Expand file tree Collapse file tree 3 files changed +25
-3
lines changed
Expand file tree Collapse file tree 3 files changed +25
-3
lines changed Original file line number Diff line number Diff line change 1+ import types
2+
13from django .db import models
24from django .db .models .query import ModelIterable
35from django .db .models .manager import BaseManager
@@ -142,7 +144,18 @@ def serialize(objs):
142144 return serializer .serialize (objs )
143145
144146
147+ class _FuncSerializer (BaseSerializer ):
148+ def __init__ (self , func ):
149+ super ().__init__ ()
150+ self .func = func
151+
152+ def serialize_object (self , obj ):
153+ return self .func (obj )
154+
155+
145156def _resolve_serializer (serializer ):
146- if not isinstance (serializer , BaseSerializer ):
157+ if isinstance (serializer , types .FunctionType ):
158+ serializer = _FuncSerializer (serializer )
159+ elif not isinstance (serializer , BaseSerializer ):
147160 serializer = serializer ()
148161 return serializer
Original file line number Diff line number Diff line change @@ -57,22 +57,31 @@ def serialize_object(self, obj):
5757 'myattr' : obj .company .name
5858 }
5959
60+ def func (obj ):
61+ return {
62+ 'seats' : 32 ,
63+ }
64+
6065 class S (BaseSerializer ):
6166 extra = {
6267 'myattr' : Attr ,
68+ 'func' : func ,
6369 }
6470
6571 def serialize_object (self , obj ):
6672 return {
6773 'plate' : obj .plate ,
6874 }
6975
76+ serializer = S (extra = ['myattr' , 'func' ])
77+
7078 with django_assert_num_queries (1 ):
71- bus = Bus .objects .to_serialize (S ( extra = [ 'myattr' ]) ).first ()
79+ bus = Bus .objects .to_serialize (serializer ).first ()
7280
7381 expected = {
7482 'plate' : 'BUSER' ,
7583 'myattr' : 'Hurricane Cart' ,
84+ 'seats' : 32 ,
7685 }
7786
7887 with django_assert_num_queries (0 ):
Original file line number Diff line number Diff line change 11[metadata]
22name = django_qserializer
3- version = 0.2.2
3+ version = 0.2.3
44url = https://github.com/buserbrasil/django-qserializer
55license = MIT
66author = Iuri de Silvio
You can’t perform that action at this time.
0 commit comments