Skip to content

Commit 5d2dd0e

Browse files
committed
More generic function for form field conversion
1 parent 8ab7f23 commit 5d2dd0e

File tree

2 files changed

+9
-25
lines changed

2 files changed

+9
-25
lines changed

src/reactpy_django/forms/components.py

+2-3
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
set_value_prop_on_select_element,
1818
transform_value_prop_on_input_element,
1919
)
20-
from reactpy_django.forms.utils import convert_boolean_fields, convert_multiple_choice_fields
20+
from reactpy_django.forms.utils import convert_form_fields
2121
from reactpy_django.types import AsyncFormEvent, FormEventData, SyncFormEvent
2222
from reactpy_django.utils import ensure_async
2323

@@ -95,8 +95,7 @@ async def render_form():
9595
async def on_submit_callback(new_data: dict[str, Any]):
9696
"""Callback function provided directly to the client side listener. This is responsible for transmitting
9797
the submitted form data to the server for processing."""
98-
convert_multiple_choice_fields(new_data, initialized_form)
99-
convert_boolean_fields(new_data, initialized_form)
98+
convert_form_fields(new_data, initialized_form)
10099

101100
if on_receive_data:
102101
new_form_event = FormEventData(

src/reactpy_django/forms/utils.py

+7-22
Original file line numberDiff line numberDiff line change
@@ -5,27 +5,12 @@
55
from django.forms import BooleanField, Form, ModelForm, ModelMultipleChoiceField, MultipleChoiceField, NullBooleanField
66

77

8-
def convert_multiple_choice_fields(data: dict[str, Any], initialized_form: Form | ModelForm) -> None:
9-
multi_choice_fields = {
10-
field_name
11-
for field_name, field in initialized_form.fields.items()
12-
if isinstance(field, (MultipleChoiceField, ModelMultipleChoiceField))
13-
}
8+
def convert_form_fields(data: dict[str, Any], initialized_form: Form | ModelForm) -> None:
9+
for field_name, field in initialized_form.fields.items():
10+
value = data.get(field_name)
1411

15-
# Convert multiple choice field text into a list of values
16-
for choice_field_name in multi_choice_fields:
17-
value = data.get(choice_field_name)
18-
if value is not None and not isinstance(value, list):
19-
data[choice_field_name] = [value]
12+
if isinstance(field, (MultipleChoiceField, ModelMultipleChoiceField)) and value is not None:
13+
data[field_name] = value if isinstance(value, list) else [value]
2014

21-
22-
def convert_boolean_fields(data: dict[str, Any], initialized_form: Form | ModelForm) -> None:
23-
boolean_fields = {
24-
field_name
25-
for field_name, field in initialized_form.fields.items()
26-
if isinstance(field, BooleanField) and not isinstance(field, NullBooleanField)
27-
}
28-
29-
# Convert boolean field text into actual booleans
30-
for boolean_field_name in boolean_fields:
31-
data[boolean_field_name] = boolean_field_name in data
15+
elif isinstance(field, BooleanField) and not isinstance(field, NullBooleanField):
16+
data[field_name] = field_name in data

0 commit comments

Comments
 (0)