summaryrefslogtreecommitdiff
path: root/django/core
diff options
context:
space:
mode:
authorChristoph Sieghart <sigi@0x2a.at>2013-03-06 22:15:36 +0100
committerFlorian Apolloner <florian@apolloner.eu>2013-03-30 11:59:50 +0100
commit465b01f065a8482bfa42c19e3854a3c810e69d33 (patch)
treef55471d74c81765b348addd59b550866cf8a98da /django/core
parent6c730da1f6d34f5c38fa1d990d368286e016546c (diff)
Fixed #19998 -- Fixed --ignorenonexistent support for XML based fixtures.
Diffstat (limited to 'django/core')
-rw-r--r--django/core/serializers/xml_serializer.py6
1 files changed, 5 insertions, 1 deletions
diff --git a/django/core/serializers/xml_serializer.py b/django/core/serializers/xml_serializer.py
index 9dd4eee282..988c3360e9 100644
--- a/django/core/serializers/xml_serializer.py
+++ b/django/core/serializers/xml_serializer.py
@@ -155,6 +155,7 @@ class Deserializer(base.Deserializer):
super(Deserializer, self).__init__(stream_or_string, **options)
self.event_stream = pulldom.parse(self.stream, self._make_parser())
self.db = options.pop('using', DEFAULT_DB_ALIAS)
+ self.ignore = options.pop('ignorenonexistent', False)
def _make_parser(self):
"""Create a hardened XML parser (no custom/external entities)."""
@@ -188,6 +189,7 @@ class Deserializer(base.Deserializer):
# {m2m_accessor_attribute : [list_of_related_objects]})
m2m_data = {}
+ model_fields = Model._meta.get_all_field_names()
# Deseralize each field.
for field_node in node.getElementsByTagName("field"):
# If the field is missing the name attribute, bail (are you
@@ -198,7 +200,9 @@ class Deserializer(base.Deserializer):
# Get the field from the Model. This will raise a
# FieldDoesNotExist if, well, the field doesn't exist, which will
- # be propagated correctly.
+ # be propagated correctly unless ignorenonexistent=True is used.
+ if self.ignore and field_name not in model_fields:
+ continue
field = Model._meta.get_field(field_name)
# As is usually the case, relation fields get the special treatment.