diff --git a/src/openforms/formio/components/vanilla.py b/src/openforms/formio/components/vanilla.py index 75315c41d5..cb42b13b75 100644 --- a/src/openforms/formio/components/vanilla.py +++ b/src/openforms/formio/components/vanilla.py @@ -91,6 +91,12 @@ class Default(BasePlugin): class TextField(BasePlugin[TextFieldComponent]): formatter = TextFieldFormatter + @staticmethod + def normalizer(component: Component, value: str) -> str: + if isinstance(value, (int, float)): + return str(value) + return value + def build_serializer_field( self, component: TextFieldComponent ) -> serializers.CharField | serializers.ListField: diff --git a/src/openforms/formio/tests/test_normalization.py b/src/openforms/formio/tests/test_normalization.py index a3e8f2fc6f..69979fc015 100644 --- a/src/openforms/formio/tests/test_normalization.py +++ b/src/openforms/formio/tests/test_normalization.py @@ -1,4 +1,4 @@ -from django.test import SimpleTestCase +from django.test import SimpleTestCase, tag from ..service import normalize_value_for_component @@ -63,3 +63,13 @@ def test_normalize_unknown_component_type(self): result = normalize_value_for_component(component, "foo.bar-baz") self.assertEqual(result, "foo.bar-baz") # unmodified + + @tag("gh-4774") + def test_textfield_normalization_non_str(self): + component = {"type": "textfield"} + + int_result = normalize_value_for_component(component, 9) + float_result = normalize_value_for_component(component, 9.9) + + self.assertEqual(int_result, "9") + self.assertEqual(float_result, "9.9")