summaryrefslogtreecommitdiff
path: root/django/core/serializers
diff options
context:
space:
mode:
authorRobin Munn <robin.munn@gmail.com>2006-11-08 04:50:01 +0000
committerRobin Munn <robin.munn@gmail.com>2006-11-08 04:50:01 +0000
commitdadfca08c0db567ce33284aaa8eb388cf667a836 (patch)
treeab7255eeee1bbe03d95652cc74a3843fa052d8ac /django/core/serializers
parent0b059aa4eadc1d95ceca3a32821b65a9fb2a53e8 (diff)
sqlalchemy: Merged revisions 3918 to 4053 from trunk.
git-svn-id: http://code.djangoproject.com/svn/django/branches/sqlalchemy@4054 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'django/core/serializers')
-rw-r--r--django/core/serializers/__init__.py2
-rw-r--r--django/core/serializers/base.py10
-rw-r--r--django/core/serializers/python.py2
-rw-r--r--django/core/serializers/xml_serializer.py6
4 files changed, 14 insertions, 6 deletions
diff --git a/django/core/serializers/__init__.py b/django/core/serializers/__init__.py
index 75e087ee1b..a1268321f2 100644
--- a/django/core/serializers/__init__.py
+++ b/django/core/serializers/__init__.py
@@ -29,7 +29,7 @@ _serializers = {}
def register_serializer(format, serializer_module):
"""Register a new serializer by passing in a module name."""
- module = __import__(serializer_module, '', '', [''])
+ module = __import__(serializer_module, {}, {}, [''])
_serializers[format] = module
def unregister_serializer(format):
diff --git a/django/core/serializers/base.py b/django/core/serializers/base.py
index fb293c7c13..5b0acdc480 100644
--- a/django/core/serializers/base.py
+++ b/django/core/serializers/base.py
@@ -28,6 +28,7 @@ class Serializer(object):
self.options = options
self.stream = options.get("stream", StringIO())
+ self.selected_fields = options.get("fields")
self.start_serialization()
for obj in queryset:
@@ -36,11 +37,14 @@ class Serializer(object):
if field is obj._meta.pk:
continue
elif field.rel is None:
- self.handle_field(obj, field)
+ if self.selected_fields is None or field.attname in self.selected_fields:
+ self.handle_field(obj, field)
else:
- self.handle_fk_field(obj, field)
+ if self.selected_fields is None or field.attname[:-3] in self.selected_fields:
+ self.handle_fk_field(obj, field)
for field in obj._meta.many_to_many:
- self.handle_m2m_field(obj, field)
+ if self.selected_fields is None or field.attname in self.selected_fields:
+ self.handle_m2m_field(obj, field)
self.end_object(obj)
self.end_serialization()
return self.getvalue()
diff --git a/django/core/serializers/python.py b/django/core/serializers/python.py
index 4181bc7f2b..859816c226 100644
--- a/django/core/serializers/python.py
+++ b/django/core/serializers/python.py
@@ -76,7 +76,7 @@ def Deserializer(object_list, **options):
m2m_data[field.name] = field.rel.to._default_manager.in_bulk(field_value).values()
# Handle FK fields
- elif field.rel and isinstance(field.rel, models.ManyToOneRel):
+ elif field.rel and isinstance(field.rel, models.ManyToOneRel) and field_value is not None:
try:
data[field.name] = field.rel.to._default_manager.get(pk=field_value)
except field.rel.to.DoesNotExist:
diff --git a/django/core/serializers/xml_serializer.py b/django/core/serializers/xml_serializer.py
index 09fff408cf..512b8c6176 100644
--- a/django/core/serializers/xml_serializer.py
+++ b/django/core/serializers/xml_serializer.py
@@ -166,7 +166,11 @@ class Deserializer(base.Deserializer):
# If it doesn't exist, set the field to None (which might trigger
# validation error, but that's expected).
RelatedModel = self._get_model_from_node(node, "to")
- return RelatedModel.objects.get(pk=getInnerText(node).strip().encode(self.encoding))
+ # Check if there is a child node named 'None', returning None if so.
+ if len(node.childNodes) == 1 and node.childNodes[0].nodeName == 'None':
+ return None
+ else:
+ return RelatedModel.objects.get(pk=getInnerText(node).strip().encode(self.encoding))
def _handle_m2m_field_node(self, node):
"""