diff options
| author | Tim Graham <timograham@gmail.com> | 2026-04-04 17:58:05 -0400 |
|---|---|---|
| committer | Jacob Walls <jacobtylerwalls@gmail.com> | 2026-04-06 13:04:33 -0400 |
| commit | eb244b011716d62b22dbca45f0a621a6192cad67 (patch) | |
| tree | 223c2e7c21a7ea8810ad87e0d18df618aad70a29 /django | |
| parent | dadf5df6a05c7b668ce86dca019e7d8d5f461c76 (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.py | 21 |
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", { |
