Skip to content

Commit 1b1d24a

Browse files
committed
Make defaults work for LocalizedIntegerField
1 parent fb233e8 commit 1b1d24a

File tree

2 files changed

+21
-2
lines changed

2 files changed

+21
-2
lines changed

localized_fields/fields/integer_field.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,17 @@ def to_python(self, value: Union[Dict[str, int], int, None]) -> LocalizedInteger
3232
db_value = super().to_python(value)
3333
return self._convert_localized_value(db_value)
3434

35-
def get_prep_value(self, value: LocalizedValue) -> dict:
35+
def get_prep_value(self, value: LocalizedIntegerValue) -> dict:
3636
"""Gets the value in a format to store into the database."""
3737

38+
# apply default values
39+
default_values = LocalizedIntegerValue(self.default)
40+
if isinstance(value, LocalizedIntegerValue):
41+
for lang_code, _ in settings.LANGUAGES:
42+
local_value = value.get(lang_code)
43+
if local_value is None:
44+
value.set(lang_code, default_values.get(lang_code, None))
45+
3846
prepped_value = super().get_prep_value(value)
3947
if prepped_value is None:
4048
return None
@@ -51,7 +59,7 @@ def get_prep_value(self, value: LocalizedValue) -> dict:
5159

5260
# convert to a string before saving because the underlying
5361
# type is hstore, which only accept strings
54-
prepped_value[lang_code] = str(local_value) if local_value else None
62+
prepped_value[lang_code] = str(local_value) if local_value is not None else None
5563

5664
return prepped_value
5765

tests/test_integer_field.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,3 +163,14 @@ def test_default_value(self):
163163

164164
obj = model.objects.create()
165165
assert obj.score.get(settings.LANGUAGE_CODE) == 75
166+
167+
obj = model()
168+
for lang_code, _ in settings.LANGUAGES:
169+
obj.score.set(lang_code, None)
170+
obj.save()
171+
172+
for lang_code, _ in settings.LANGUAGES:
173+
if lang_code == settings.LANGUAGE_CODE:
174+
assert obj.score.get(lang_code) == 75
175+
else:
176+
assert obj.score.get(lang_code) is None

0 commit comments

Comments
 (0)