Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions django/contrib/admin/static/admin/css/base.css
Original file line number Diff line number Diff line change
Expand Up @@ -776,12 +776,12 @@ ol.breadcrumbs a:focus, ol.breadcrumbs a:hover {

.viewlink, .inlineviewlink {
padding-left: 16px;
background: url(../img/icon-viewlink.svg) 0 1px no-repeat;
background: url(../img/icon-viewlink.svg) 0 center no-repeat;
}

.hidelink {
padding-left: 16px;
background: url(../img/icon-hidelink.svg) 0 1px no-repeat;
background: url(../img/icon-hidelink.svg) 0 center no-repeat;
}

.addlink {
Expand Down
2 changes: 1 addition & 1 deletion django/contrib/admin/static/admin/css/rtl.css
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ th {
.viewlink, .addlink, .changelink, .hidelink {
padding-left: 0;
padding-right: 16px;
background-position: 100% 1px;
background-position-x: 100%;
}

.deletelink {
Expand Down
29 changes: 23 additions & 6 deletions django/core/serializers/xml_serializer.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,10 @@ def start_serialization(self):
"""
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)
)
Expand All @@ -58,7 +62,7 @@ def end_serialization(self):
"""
End serialization -- end the document.
"""
self.indent(0)
self.indent(self.indent_level)
self.xml.endElement("django-objects")
self.xml.endDocument()

Expand All @@ -71,7 +75,8 @@ def start_object(self, obj):
"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
Expand All @@ -84,15 +89,17 @@ def end_object(self, obj):
"""
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",
{
Expand All @@ -119,6 +126,7 @@ def handle_field(self, obj, field):
self.xml.addQuickElement("None")

self.xml.endElement("field")
self.indent_level -= 1

def handle_fk_field(self, obj, field):
"""
Expand All @@ -144,6 +152,7 @@ def handle_fk_field(self, obj, field):
else:
self.xml.addQuickElement("None")
self.xml.endElement("field")
self.indent_level -= 1

def handle_m2m_field(self, obj, field):
"""
Expand Down Expand Up @@ -190,6 +199,8 @@ def queryset_iterator(obj, field):
else:

def handle_m2m(value):
# Put each object on its own line.
self.indent(self.indent_level + 1)
self.xml.addQuickElement("object", attrs={"pk": str(value.pk)})

def queryset_iterator(obj, field):
Expand All @@ -208,14 +219,20 @@ def queryset_iterator(obj, field):
field.name,
queryset_iterator(obj, field),
)
relobj = None
for relobj in m2m_iter:
handle_m2m(relobj)

if relobj:
# If there are related objects (which appear each on their own
# line), put the closing </field> on the next line.
self.indent(self.indent_level)
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",
{
Expand Down
5 changes: 4 additions & 1 deletion tests/serializers/test_xml.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,10 @@ class XmlSerializerTestCase(SerializersTestBase, TestCase):
<field name="author" rel="ManyToOneRel" to="serializers.author">%(author_pk)s</field>
<field name="headline" type="CharField">Poker has no place on ESPN</field>
<field name="pub_date" type="DateTimeField">2006-06-16T11:00:00</field>
<field name="categories" rel="ManyToManyRel" to="serializers.category"><object pk="%(first_category_pk)s"></object><object pk="%(second_category_pk)s"></object></field>
<field name="categories" rel="ManyToManyRel" to="serializers.category">
<object pk="%(first_category_pk)s"></object>
<object pk="%(second_category_pk)s"></object>
</field>
<field name="meta_data" rel="ManyToManyRel" to="serializers.categorymetadata"></field>
<field name="topics" rel="ManyToManyRel" to="serializers.topic"></field>
</object>
Expand Down
Loading