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..85c90cc 100644 --- a/localized_fields/value.py +++ b/localized_fields/value.py @@ -228,3 +228,9 @@ class LocalizedIntegerValue(LocalizedValue): return self.default_value return int(value) + + def __str__(self) -> str: + """Returns string representation of value""" + + value = self.translate() + return str(value) if value is not None else None 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