From 4f83cbf4edc407476378dbefcc15b6b4c5ee1fe2 Mon Sep 17 00:00:00 2001 From: Cristi Ingineru Date: Thu, 16 Aug 2018 14:27:38 +0300 Subject: [PATCH 1/2] Add LocalizedIntegerFieldWidget --- localized_fields/fields/integer_field.py | 10 ++++++++++ localized_fields/forms.py | 12 ++++++++++-- localized_fields/value.py | 5 +++++ localized_fields/widgets.py | 4 ++++ tests/test_integer_field.py | 1 + 5 files changed, 30 insertions(+), 2 deletions(-) diff --git a/localized_fields/fields/integer_field.py b/localized_fields/fields/integer_field.py index c91e0dc..6374aa1 100644 --- a/localized_fields/fields/integer_field.py +++ b/localized_fields/fields/integer_field.py @@ -5,6 +5,7 @@ from django.db.utils import IntegrityError from .field import LocalizedField from ..value import LocalizedValue, LocalizedIntegerValue +from ..forms import LocalizedIntegerFieldForm class LocalizedIntegerField(LocalizedField): @@ -63,6 +64,15 @@ class LocalizedIntegerField(LocalizedField): return prepped_value + def formfield(self, **kwargs): + """Gets the form field associated with this field.""" + defaults = { + 'form_class': LocalizedIntegerFieldForm + } + + defaults.update(kwargs) + return super().formfield(**defaults) + @staticmethod def _convert_localized_value(value: LocalizedValue) -> LocalizedIntegerValue: """Converts from :see:LocalizedValue to :see:LocalizedIntegerValue.""" diff --git a/localized_fields/forms.py b/localized_fields/forms.py index 21606cf..1077591 100644 --- a/localized_fields/forms.py +++ b/localized_fields/forms.py @@ -6,9 +6,9 @@ from django.core.exceptions import ValidationError from django.forms.widgets import FILE_INPUT_CONTRADICTION from .value import LocalizedValue, LocalizedStringValue, \ - LocalizedFileValue + LocalizedFileValue, LocalizedIntegerValue from .widgets import LocalizedFieldWidget, LocalizedCharFieldWidget, \ - LocalizedFileWidget + LocalizedFileWidget, AdminLocalizedIntegerFieldWidget class LocalizedFieldForm(forms.MultiValueField): @@ -79,6 +79,14 @@ class LocalizedTextFieldForm(LocalizedFieldForm): value_class = LocalizedStringValue +class LocalizedIntegerFieldForm(LocalizedFieldForm): + """Form for a localized integer field, allows editing + the field in multiple languages.""" + + widget = AdminLocalizedIntegerFieldWidget + value_class = LocalizedIntegerValue + + class LocalizedFileFieldForm(LocalizedFieldForm, forms.FileField): """Form for a localized file field, allows editing the field in multiple languages.""" diff --git a/localized_fields/value.py b/localized_fields/value.py index 65f2a0c..948ac91 100644 --- a/localized_fields/value.py +++ b/localized_fields/value.py @@ -228,3 +228,8 @@ class LocalizedIntegerValue(LocalizedValue): return self.default_value return int(value) + + def __str__(self) -> str: + """Returns string representation of value""" + + return str(self.get(translation.get_language())) diff --git a/localized_fields/widgets.py b/localized_fields/widgets.py index 57ed392..f48bf5a 100644 --- a/localized_fields/widgets.py +++ b/localized_fields/widgets.py @@ -120,3 +120,7 @@ class AdminLocalizedCharFieldWidget(AdminLocalizedFieldWidget): class AdminLocalizedFileFieldWidget(AdminLocalizedFieldWidget): widget = widgets.AdminFileWidget + + +class AdminLocalizedIntegerFieldWidget(AdminLocalizedFieldWidget): + widget = widgets.AdminIntegerFieldWidget diff --git a/tests/test_integer_field.py b/tests/test_integer_field.py index d7c5a06..f365ef8 100644 --- a/tests/test_integer_field.py +++ b/tests/test_integer_field.py @@ -4,6 +4,7 @@ from django.conf import settings from django.db import connection from django.utils import translation +from localized_fields.value import LocalizedIntegerValue from localized_fields.fields import LocalizedIntegerField from .fake_model import get_fake_model From 4922a1b93fec5929798d0bc3e207eb85ea0488dd Mon Sep 17 00:00:00 2001 From: Cristi Ingineru Date: Mon, 24 Sep 2018 12:57:46 +0300 Subject: [PATCH 2/2] self.translate() --- localized_fields/value.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/localized_fields/value.py b/localized_fields/value.py index 948ac91..85c90cc 100644 --- a/localized_fields/value.py +++ b/localized_fields/value.py @@ -232,4 +232,5 @@ class LocalizedIntegerValue(LocalizedValue): def __str__(self) -> str: """Returns string representation of value""" - return str(self.get(translation.get_language())) + value = self.translate() + return str(value) if value is not None else None