From 1b1d24a460268566d2abe310b3f57e2347b13e96 Mon Sep 17 00:00:00 2001 From: Swen Kooij Date: Fri, 15 Jun 2018 17:07:12 +0300 Subject: [PATCH] Make defaults work for LocalizedIntegerField --- localized_fields/fields/integer_field.py | 12 ++++++++++-- tests/test_integer_field.py | 11 +++++++++++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/localized_fields/fields/integer_field.py b/localized_fields/fields/integer_field.py index 88b7309..c91e0dc 100644 --- a/localized_fields/fields/integer_field.py +++ b/localized_fields/fields/integer_field.py @@ -32,9 +32,17 @@ class LocalizedIntegerField(LocalizedField): db_value = super().to_python(value) return self._convert_localized_value(db_value) - def get_prep_value(self, value: LocalizedValue) -> dict: + def get_prep_value(self, value: LocalizedIntegerValue) -> dict: """Gets the value in a format to store into the database.""" + # apply default values + default_values = LocalizedIntegerValue(self.default) + if isinstance(value, LocalizedIntegerValue): + for lang_code, _ in settings.LANGUAGES: + local_value = value.get(lang_code) + if local_value is None: + value.set(lang_code, default_values.get(lang_code, None)) + prepped_value = super().get_prep_value(value) if prepped_value is None: return None @@ -51,7 +59,7 @@ class LocalizedIntegerField(LocalizedField): # 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 + prepped_value[lang_code] = str(local_value) if local_value is not None else None return prepped_value diff --git a/tests/test_integer_field.py b/tests/test_integer_field.py index 8113a21..d7c5a06 100644 --- a/tests/test_integer_field.py +++ b/tests/test_integer_field.py @@ -163,3 +163,14 @@ class LocalizedIntegerFieldTestCase(TestCase): obj = model.objects.create() assert obj.score.get(settings.LANGUAGE_CODE) == 75 + + obj = model() + for lang_code, _ in settings.LANGUAGES: + obj.score.set(lang_code, None) + obj.save() + + for lang_code, _ in settings.LANGUAGES: + if lang_code == settings.LANGUAGE_CODE: + assert obj.score.get(lang_code) == 75 + else: + assert obj.score.get(lang_code) is None