@@ -48,6 +48,10 @@ def start_serialization(self):
4848 """
4949 Start serialization -- open the XML document and the root element.
5050 """
51+ # Increment the indent_level before each startElement() and decrement
52+ # it following each endElement(). If the closing tag should appear on
53+ # its own line, use self.indent(self.indent_level) before endElement().
54+ self .indent_level = 0
5155 self .xml = SimplerXMLGenerator (
5256 self .stream , self .options .get ("encoding" , settings .DEFAULT_CHARSET )
5357 )
@@ -58,7 +62,7 @@ def end_serialization(self):
5862 """
5963 End serialization -- end the document.
6064 """
61- self .indent (0 )
65+ self .indent (self . indent_level )
6266 self .xml .endElement ("django-objects" )
6367 self .xml .endDocument ()
6468
@@ -71,7 +75,8 @@ def start_object(self, obj):
7175 "Non-model object (%s) encountered during serialization" % type (obj )
7276 )
7377
74- self .indent (1 )
78+ self .indent_level += 1
79+ self .indent (self .indent_level )
7580 attrs = {"model" : str (obj ._meta )}
7681 if not self .use_natural_primary_keys or not self ._resolve_natural_key (obj ):
7782 obj_pk = obj .pk
@@ -84,15 +89,17 @@ def end_object(self, obj):
8489 """
8590 Called after handling all fields for an object.
8691 """
87- self .indent (1 )
92+ self .indent (self . indent_level )
8893 self .xml .endElement ("object" )
94+ self .indent_level -= 1
8995
9096 def handle_field (self , obj , field ):
9197 """
9298 Handle each field on an object (except for ForeignKeys and
9399 ManyToManyFields).
94100 """
95- self .indent (2 )
101+ self .indent_level += 1
102+ self .indent (self .indent_level )
96103 self .xml .startElement (
97104 "field" ,
98105 {
@@ -119,6 +126,7 @@ def handle_field(self, obj, field):
119126 self .xml .addQuickElement ("None" )
120127
121128 self .xml .endElement ("field" )
129+ self .indent_level -= 1
122130
123131 def handle_fk_field (self , obj , field ):
124132 """
@@ -144,6 +152,7 @@ def handle_fk_field(self, obj, field):
144152 else :
145153 self .xml .addQuickElement ("None" )
146154 self .xml .endElement ("field" )
155+ self .indent_level -= 1
147156
148157 def handle_m2m_field (self , obj , field ):
149158 """
@@ -212,10 +221,12 @@ def queryset_iterator(obj, field):
212221 handle_m2m (relobj )
213222
214223 self .xml .endElement ("field" )
224+ self .indent_level -= 1
215225
216226 def _start_relational_field (self , field ):
217227 """Output the <field> element for relational fields."""
218- self .indent (2 )
228+ self .indent_level += 1
229+ self .indent (self .indent_level )
219230 self .xml .startElement (
220231 "field" ,
221232 {
0 commit comments