Make sure values are strings before saving LocalizedIntegerValue

This commit is contained in:
Swen Kooij 2018-06-15 16:19:32 +03:00
parent bca94a3508
commit fb233e8f25
3 changed files with 21 additions and 4 deletions

View File

@ -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

View File

@ -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',

View File

@ -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