Merge pull request #78 from SectorLabs/default-values-callables

Accept callables as values in fields
This commit is contained in:
Swen Kooij 2020-02-17 12:58:02 +02:00 committed by GitHub
commit 701114c20e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 15 additions and 1 deletions

View File

@ -105,7 +105,7 @@ class LocalizedIntegerField(LocalizedField):
@staticmethod
def _convert_localized_value(
value: LocalizedValue
value: LocalizedValue,
) -> LocalizedIntegerValue:
"""Converts from :see:LocalizedValue to :see:LocalizedIntegerValue."""

View File

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

View File

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