Skip to content

Commit

Permalink
Fixed #4558 -- Modified XML serializer to handle whitespace better ar…
Browse files Browse the repository at this point in the history
…ound None tags. Thanks to Bill Fenner <fenner@gmail.com> for the report and fix.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@5727 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information
freakboy3742 committed Jul 20, 2007
1 parent 0827f4a commit 3fef1f4
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 2 deletions.
4 changes: 2 additions & 2 deletions django/core/serializers/xml_serializer.py
Original file line number Diff line number Diff line change
Expand Up @@ -171,7 +171,7 @@ def _handle_object(self, node):
elif field.rel and isinstance(field.rel, models.ManyToOneRel):
data[field.attname] = self._handle_fk_field_node(field_node, field)
else:
if len(field_node.childNodes) == 1 and field_node.childNodes[0].nodeName == 'None':
if field_node.getElementsByTagName('None'):
value = None
else:
value = field.to_python(getInnerText(field_node).strip())
Expand All @@ -185,7 +185,7 @@ def _handle_fk_field_node(self, node, field):
Handle a <field> node for a ForeignKey
"""
# Check if there is a child node named 'None', returning None if so.
if len(node.childNodes) == 1 and node.childNodes[0].nodeName == 'None':
if node.getElementsByTagName('None'):
return None
else:
return field.rel.to._meta.get_field(field.rel.field_name).to_python(
Expand Down
11 changes: 11 additions & 0 deletions tests/regressiontests/fixtures_regress/fixtures/pretty.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<django-objects version="1.0">
<object pk="1" model="fixtures_regress.stuff">
<field type="CharField" name="name">
<None/>
</field>
<field to="auth.user" name="owner" rel="ManyToOneRel">
<None/>
</field>
</object>
</django-objects>
17 changes: 17 additions & 0 deletions tests/regressiontests/fixtures_regress/models.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
from django.db import models
from django.contrib.auth.models import User

class Animal(models.Model):
name = models.CharField(maxlength=150)
Expand All @@ -14,6 +15,13 @@ class Meta:
# For testing when upper case letter in app name; regression for #4057
db_table = "Fixtures_regress_plant"

class Stuff(models.Model):
name = models.CharField(maxlength=20, null=True)
owner = models.ForeignKey(User, null=True)

def __unicode__(self):
return unicode(self.name) + u' is owned by ' + unicode(self.owner)

__test__ = {'API_TESTS':"""
>>> from django.core import management
Expand All @@ -26,4 +34,13 @@ class Meta:
>>> animal = Animal(name='Platypus', latin_name='Ornithorhynchus anatinus')
>>> animal.save()
###############################################
# Regression test for ticket #4558 -- pretty printing of XML fixtures
# doesn't affect parsing of None values.
# Load a pretty-printed XML fixture with Nulls.
>>> management.load_data(['pretty.xml'], verbosity=0)
>>> Stuff.objects.all()
[<Stuff: None is owned by None>]
"""}

0 comments on commit 3fef1f4

Please sign in to comment.