summaryrefslogtreecommitdiff
path: root/django
diff options
context:
space:
mode:
authorTim Graham <timograham@gmail.com>2026-04-04 17:58:05 -0400
committerJacob Walls <jacobtylerwalls@gmail.com>2026-04-06 13:04:33 -0400
commiteb244b011716d62b22dbca45f0a621a6192cad67 (patch)
tree223c2e7c21a7ea8810ad87e0d18df618aad70a29 /django
parentdadf5df6a05c7b668ce86dca019e7d8d5f461c76 (diff)
Refs #37023 -- Removed hardcoded indent levels from XML serializer.
This facilitates nested fields and objects.
Diffstat (limited to 'django')
-rw-r--r--django/core/serializers/xml_serializer.py21
1 files changed, 16 insertions, 5 deletions
diff --git a/django/core/serializers/xml_serializer.py b/django/core/serializers/xml_serializer.py
index 3d1f79ea0d..82a345d57f 100644
--- a/django/core/serializers/xml_serializer.py
+++ b/django/core/serializers/xml_serializer.py
@@ -48,6 +48,10 @@ class Serializer(base.Serializer):
"""
Start serialization -- open the XML document and the root element.
"""
+ # Increment the indent_level before each startElement() and decrement
+ # it following each endElement(). If the closing tag should appear on
+ # its own line, use self.indent(self.indent_level) before endElement().
+ self.indent_level = 0
self.xml = SimplerXMLGenerator(
self.stream, self.options.get("encoding", settings.DEFAULT_CHARSET)
)
@@ -58,7 +62,7 @@ class Serializer(base.Serializer):
"""
End serialization -- end the document.
"""
- self.indent(0)
+ self.indent(self.indent_level)
self.xml.endElement("django-objects")
self.xml.endDocument()
@@ -71,7 +75,8 @@ class Serializer(base.Serializer):
"Non-model object (%s) encountered during serialization" % type(obj)
)
- self.indent(1)
+ self.indent_level += 1
+ self.indent(self.indent_level)
attrs = {"model": str(obj._meta)}
if not self.use_natural_primary_keys or not self._resolve_natural_key(obj):
obj_pk = obj.pk
@@ -84,15 +89,17 @@ class Serializer(base.Serializer):
"""
Called after handling all fields for an object.
"""
- self.indent(1)
+ self.indent(self.indent_level)
self.xml.endElement("object")
+ self.indent_level -= 1
def handle_field(self, obj, field):
"""
Handle each field on an object (except for ForeignKeys and
ManyToManyFields).
"""
- self.indent(2)
+ self.indent_level += 1
+ self.indent(self.indent_level)
self.xml.startElement(
"field",
{
@@ -119,6 +126,7 @@ class Serializer(base.Serializer):
self.xml.addQuickElement("None")
self.xml.endElement("field")
+ self.indent_level -= 1
def handle_fk_field(self, obj, field):
"""
@@ -144,6 +152,7 @@ class Serializer(base.Serializer):
else:
self.xml.addQuickElement("None")
self.xml.endElement("field")
+ self.indent_level -= 1
def handle_m2m_field(self, obj, field):
"""
@@ -212,10 +221,12 @@ class Serializer(base.Serializer):
handle_m2m(relobj)
self.xml.endElement("field")
+ self.indent_level -= 1
def _start_relational_field(self, field):
"""Output the <field> element for relational fields."""
- self.indent(2)
+ self.indent_level += 1
+ self.indent(self.indent_level)
self.xml.startElement(
"field",
{