From fb233e8f250330274e2605b1257388e4180c348c Mon Sep 17 00:00:00 2001 From: Swen Kooij Date: Fri, 15 Jun 2018 16:19:32 +0300 Subject: [PATCH] Make sure values are strings before saving LocalizedIntegerValue --- localized_fields/fields/integer_field.py | 9 +++++++-- setup.py | 5 +++-- tests/test_integer_field.py | 11 +++++++++++ 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/localized_fields/fields/integer_field.py b/localized_fields/fields/integer_field.py index 97ed9de..88b7309 100644 --- a/localized_fields/fields/integer_field.py +++ b/localized_fields/fields/integer_field.py @@ -41,13 +41,18 @@ class LocalizedIntegerField(LocalizedField): # make sure all values are proper integers for lang_code, _ in settings.LANGUAGES: + local_value = prepped_value[lang_code] try: - if prepped_value[lang_code] is not None: - int(prepped_value[lang_code]) + if local_value is not None: + int(local_value) except (TypeError, ValueError): raise IntegrityError('non-integer value in column "%s.%s" violates ' 'integer constraint' % (self.name, lang_code)) + # convert to a string before saving because the underlying + # type is hstore, which only accept strings + prepped_value[lang_code] = str(local_value) if local_value else None + return prepped_value @staticmethod diff --git a/setup.py b/setup.py index 513b2d6..7136c76 100644 --- a/setup.py +++ b/setup.py @@ -18,8 +18,9 @@ setup( author_email='open-source@sectorlabs.ro', keywords=['django', 'localized', 'language', 'models', 'fields'], install_requires=[ - 'django-postgres-extra>=1.11', - 'Django>=1.11' + 'django-postgres-extra>=1.21a', + 'Django>=1.11', + 'deprecation==2.0.3' ], classifiers=[ 'Environment :: Web Environment', diff --git a/tests/test_integer_field.py b/tests/test_integer_field.py index 74039e6..8113a21 100644 --- a/tests/test_integer_field.py +++ b/tests/test_integer_field.py @@ -152,3 +152,14 @@ class LocalizedIntegerFieldTestCase(TestCase): obj.refresh_from_db() assert obj.score.get(settings.LANGUAGE_CODE) is None + + def test_default_value(self): + """Tests whether a default is properly set + when specified.""" + + model = get_fake_model({ + 'score': LocalizedIntegerField(default={settings.LANGUAGE_CODE: 75}) + }) + + obj = model.objects.create() + assert obj.score.get(settings.LANGUAGE_CODE) == 75