Skip to content

Commit

Permalink
Merge pull request #282 from django-import-export/fix-274-0-is-interp…
Browse files Browse the repository at this point in the history
…reted-as-none

FIX: #274 0 is interpreted as None
  • Loading branch information
bmihelac committed Jun 12, 2015
2 parents 1227ae7 + 4bf2d6e commit 8e8df16
Show file tree
Hide file tree
Showing 4 changed files with 16 additions and 6 deletions.
2 changes: 2 additions & 0 deletions docs/changelog.rst
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ Changelog for django-import-export
0.2.8 (unreleased)
------------------

- Fix 0 is interpreted as None in number widgets (#274)

- add possibility to override tmp storage class (#133, #251)


Expand Down
10 changes: 7 additions & 3 deletions import_export/widgets.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,10 @@ def render(self, value):

class NumberWidget(Widget):

def is_empty(self, value):
# 0 is not empty
return value is None or value == ""

def render(self, value):
return value

Expand All @@ -48,9 +52,9 @@ class IntegerWidget(NumberWidget):
"""

def clean(self, value):
if not value and value is not 0:
if self.is_empty(value):
return None
return int(value)
return int(float(value))


class DecimalWidget(NumberWidget):
Expand All @@ -59,7 +63,7 @@ class DecimalWidget(NumberWidget):
"""

def clean(self, value):
if not value:
if self.is_empty(value):
return None
return Decimal(value)

Expand Down
5 changes: 2 additions & 3 deletions tests/core/tests/resources_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -225,11 +225,10 @@ def test_import_data_error_saving_model(self):

self.assertTrue(result.has_errors())
self.assertTrue(result.rows[0].errors)
msg = "invalid literal for int() with base 10: 'foo'"
actual = result.rows[0].errors[0].error
self.assertIsInstance(actual, ValueError)
self.assertEqual("Column 'id': invalid literal for int() with "
"base 10: 'foo'", str(actual))
self.assertIn("Column 'id': could not convert string to float",
str(actual))

def test_import_data_delete(self):

Expand Down
5 changes: 5 additions & 0 deletions tests/core/tests/widgets_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,10 @@ def test_clean(self):
def test_render(self):
self.assertEqual(self.widget.render(self.value), self.value)

def test_clean_string_zero(self):
self.assertEqual(self.widget.clean("0"), Decimal("0"))
self.assertEqual(self.widget.clean("0.0"), Decimal("0"))


class IntegerWidgetTest(TestCase):

Expand All @@ -115,6 +119,7 @@ def test_clean_integer_zero(self):

def test_clean_string_zero(self):
self.assertEqual(self.widget.clean("0"), self.value)
self.assertEqual(self.widget.clean("0.0"), self.value)


class ForeignKeyWidgetTest(TestCase):
Expand Down

0 comments on commit 8e8df16

Please sign in to comment.