summaryrefslogtreecommitdiff
path: root/django/core/serializers/xml_serializer.py
diff options
context:
space:
mode:
authorChris Beaven <smileychris@gmail.com>2010-12-21 04:40:08 +0000
committerChris Beaven <smileychris@gmail.com>2010-12-21 04:40:08 +0000
commitb60d5df07266dd4cd4f63afa6986ffb2932facc2 (patch)
treea08f75ea3485e70b5b18bde8ea7d44414b78a0bc /django/core/serializers/xml_serializer.py
parentc2657d892396c51448432637a855eb9ecac5363c (diff)
Fixes #13252 -- Use the natural key instead of the primary key when serializing
git-svn-id: http://code.djangoproject.com/svn/django/trunk@14994 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'django/core/serializers/xml_serializer.py')
-rw-r--r--django/core/serializers/xml_serializer.py31
1 files changed, 13 insertions, 18 deletions
diff --git a/django/core/serializers/xml_serializer.py b/django/core/serializers/xml_serializer.py
index bcf5631e00..36e3404988 100644
--- a/django/core/serializers/xml_serializer.py
+++ b/django/core/serializers/xml_serializer.py
@@ -42,16 +42,12 @@ class Serializer(base.Serializer):
raise base.SerializationError("Non-model object (%s) encountered during serialization" % type(obj))
self.indent(1)
- obj_pk = obj._get_pk_val()
- if obj_pk is None:
- attrs = {"model": smart_unicode(obj._meta),}
- else:
- attrs = {
- "pk": smart_unicode(obj._get_pk_val()),
- "model": smart_unicode(obj._meta),
- }
-
- self.xml.startElement("object", attrs)
+ object_data = {"model": smart_unicode(obj._meta)}
+ if not self.use_natural_keys or not hasattr(obj, 'natural_key'):
+ obj_pk = obj._get_pk_val()
+ if obj_pk is not None:
+ object_data['pk'] = smart_unicode(obj_pk)
+ self.xml.startElement("object", object_data)
def end_object(self, obj):
"""
@@ -173,13 +169,10 @@ class Deserializer(base.Deserializer):
Model = self._get_model_from_node(node, "model")
# Start building a data dictionary from the object.
- # If the node is missing the pk set it to None
- if node.hasAttribute("pk"):
- pk = node.getAttribute("pk")
- else:
- pk = None
-
- data = {Model._meta.pk.attname : Model._meta.pk.to_python(pk)}
+ data = {}
+ if node.hasAttribute('pk'):
+ data[Model._meta.pk.attname] = Model._meta.pk.to_python(
+ node.getAttribute('pk'))
# Also start building a dict of m2m data (this is saved as
# {m2m_accessor_attribute : [list_of_related_objects]})
@@ -210,8 +203,10 @@ class Deserializer(base.Deserializer):
value = field.to_python(getInnerText(field_node).strip())
data[field.name] = value
+ obj = base.build_instance(Model, data, self.db)
+
# Return a DeserializedObject so that the m2m data has a place to live.
- return base.DeserializedObject(Model(**data), m2m_data)
+ return base.DeserializedObject(obj, m2m_data)
def _handle_fk_field_node(self, node, field):
"""