Code

Ticket #5711: serialize_extra_support.diff

File serialize_extra_support.diff, 2.4 KB (added by wnielson, 6 years ago)
Line 
1Index: core/serializers/json.py
2===================================================================
3--- core/serializers/json.py    (revision 6709)
4+++ core/serializers/json.py    (working copy)
5@@ -23,6 +23,7 @@
6     def end_serialization(self):
7         self.options.pop('stream', None)
8         self.options.pop('fields', None)
9+        self.options.pop('extra', None)
10         simplejson.dump(self.objects, self.stream, cls=DjangoJSONEncoder, **self.options)
11 
12     def getvalue(self):
13Index: core/serializers/base.py
14===================================================================
15--- core/serializers/base.py    (revision 6709)
16+++ core/serializers/base.py    (working copy)
17@@ -30,7 +30,8 @@
18 
19         self.stream = options.get("stream", StringIO())
20         self.selected_fields = options.get("fields")
21-
22+        self.select_extra = options.get("extra", False)
23+       
24         self.start_serialization()
25         for obj in queryset:
26             self.start_object(obj)
27@@ -46,6 +47,9 @@
28                 if field.serialize:
29                     if self.selected_fields is None or field.attname in self.selected_fields:
30                         self.handle_m2m_field(obj, field)
31+            if self.select_extra and queryset._select is not None:
32+                for field in queryset._select.keys():
33+                    self.handle_extra(obj, field)
34             self.end_object(obj)
35         self.end_serialization()
36         return self.getvalue()
37Index: core/serializers/pyyaml.py
38===================================================================
39--- core/serializers/pyyaml.py  (revision 6709)
40+++ core/serializers/pyyaml.py  (working copy)
41@@ -20,6 +20,7 @@
42     def end_serialization(self):
43         self.options.pop('stream', None)
44         self.options.pop('fields', None)
45+        self.options.pop('extra', None)
46         yaml.dump(self.objects, self.stream, **self.options)
47 
48     def getvalue(self):
49Index: core/serializers/python.py
50===================================================================
51--- core/serializers/python.py  (revision 6709)
52+++ core/serializers/python.py  (working copy)
53@@ -34,6 +34,9 @@
54 
55     def handle_field(self, obj, field):
56         self._current[field.name] = smart_unicode(getattr(obj, field.name), strings_only=True)
57+   
58+    def handle_extra(self, obj, field):
59+        self._current[field] = smart_unicode(getattr(obj, field), strings_only=True)
60 
61     def handle_fk_field(self, obj, field):
62         related = getattr(obj, field.name)