From 465b01f065a8482bfa42c19e3854a3c810e69d33 Mon Sep 17 00:00:00 2001 From: Christoph Sieghart Date: Wed, 6 Mar 2013 22:15:36 +0100 Subject: Fixed #19998 -- Fixed --ignorenonexistent support for XML based fixtures. --- django/core/serializers/xml_serializer.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'django') 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. -- cgit v1.3