diff options
Diffstat (limited to 'django/core/serializers')
| -rw-r--r-- | django/core/serializers/__init__.py | 2 | ||||
| -rw-r--r-- | django/core/serializers/base.py | 10 | ||||
| -rw-r--r-- | django/core/serializers/python.py | 2 | ||||
| -rw-r--r-- | django/core/serializers/xml_serializer.py | 6 |
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): """ |
