From 08719680e905eb87e57a9b1e6e702bbc30e4a979 Mon Sep 17 00:00:00 2001 From: Matthias Kestenholz Date: Tue, 3 Sep 2024 08:57:51 +0200 Subject: [PATCH] Comma-separate list values in formatted_data --- CHANGELOG.rst | 2 ++ form_designer/models.py | 10 +++++++++- tests/testapp/test_forms.py | 35 +++++++++++++++++++++++++++++++---- 3 files changed, 42 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 799cb42..c8e7422 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -9,6 +9,8 @@ Next version * Changed form submissions to convert choice values back to the unslugified variant. +* Changed ``FormSubmission.formatted_data`` to automatically comma-separate + list values instead of returning the list representation. 0.25 ---- diff --git a/form_designer/models.py b/form_designer/models.py index 21d1870..fe35e8d 100644 --- a/form_designer/models.py +++ b/form_designer/models.py @@ -397,7 +397,15 @@ def __str__(self): def formatted_data(self, *, html=False, default="Ø"): sd = self.form.submissions_data(submissions=[self]) - data = ((field["title"], field["value"] or default) for field in sd[0]["data"]) + data = ( + ( + field["title"], + ", ".join(value) + if isinstance(value := field["value"] or default, list) + else value, + ) + for field in sd[0]["data"] + ) if html: return format_html( "
{}
", diff --git a/tests/testapp/test_forms.py b/tests/testapp/test_forms.py index 70994ba..4c53bf9 100644 --- a/tests/testapp/test_forms.py +++ b/tests/testapp/test_forms.py @@ -18,6 +18,8 @@ def validate_honeypot(form, data, **kwargs): class FormsTest(TestCase): + maxDiff = None + def test_forms(self): form = Form.objects.create( title="Test contact form", @@ -48,13 +50,29 @@ def test_forms(self): type="date", is_required=False, ) + form.fields.create( + ordering=6, + title="Multiple Choice", + name="multiple-choice", + type="multiple-select", + choices="Choice A,Choice B,Choice C", + is_required=False, + ) form_class = form.form_class() form_instance = form_class() self.assertListEqual( [field.name for field in form_instance], - ["subject", "email", "body", "please-call-me", "radio", "date"], + [ + "subject", + "email", + "body", + "please-call-me", + "radio", + "date", + "multiple-choice", + ], ) page = Page.objects.create(override_url="/", title="") @@ -72,7 +90,7 @@ def test_forms(self): self.assertContains( response, "