diff --git a/localized_fields/fields/integer_field.py b/localized_fields/fields/integer_field.py index 4b800be..6e94713 100644 --- a/localized_fields/fields/integer_field.py +++ b/localized_fields/fields/integer_field.py @@ -105,7 +105,7 @@ class LocalizedIntegerField(LocalizedField): @staticmethod def _convert_localized_value( - value: LocalizedValue + value: LocalizedValue, ) -> LocalizedIntegerValue: """Converts from :see:LocalizedValue to :see:LocalizedIntegerValue.""" diff --git a/localized_fields/value.py b/localized_fields/value.py index 5ee971f..ef2685d 100644 --- a/localized_fields/value.py +++ b/localized_fields/value.py @@ -90,6 +90,9 @@ class LocalizedValue(dict): for lang_code, _ in settings.LANGUAGES: self.set(lang_code, self.default_value) + if callable(value): + value = value() + if isinstance(value, str): self.set(settings.LANGUAGE_CODE, value) diff --git a/tests/test_integer_field.py b/tests/test_integer_field.py index 8084ea4..5e0d22a 100644 --- a/tests/test_integer_field.py +++ b/tests/test_integer_field.py @@ -197,6 +197,17 @@ class LocalizedIntegerFieldTestCase(TestCase): obj.refresh_from_db() assert obj.score.get(settings.LANGUAGE_CODE) == 75 + def test_callable_default_value(self): + output = {"en": 5} + + def func(): + return output + + model = get_fake_model({"test": LocalizedIntegerField(default=func)}) + obj = model.objects.create() + + assert obj.test["en"] == output["en"] + def test_order_by(self): """Tests whether ordering by a :see:LocalizedIntegerField key works expected."""