diff --git a/src/servala/frontend/forms/widgets.py b/src/servala/frontend/forms/widgets.py index d67030f..16e19bf 100644 --- a/src/servala/frontend/forms/widgets.py +++ b/src/servala/frontend/forms/widgets.py @@ -48,31 +48,18 @@ class DynamicArrayWidget(forms.Widget): def value_from_datadict(self, data, files, name): value = data.get(name) - if value is None: - return [] - if value == "": - return [] - - if isinstance(value, list): - return [item for item in value if item is not None and str(item).strip()] - - if isinstance(value, str): - if value.strip() == "" or value.strip().lower() == "null": - return [] + if value: try: parsed = json.loads(value) - if parsed is None: - return [] - if isinstance(parsed, list): + if parsed: return [ item for item in parsed if item is not None and str(item).strip() ] - return [parsed] if str(parsed).strip() else [] + return [] except (json.JSONDecodeError, TypeError): - return [value] if value.strip() else [] - + pass return [] @@ -117,17 +104,11 @@ class DynamicArrayField(forms.JSONField): if value is None: return [] if isinstance(value, list): - return [item for item in value if item is not None] + return value if isinstance(value, str): - if value.strip() == "" or value.strip().lower() == "null": - return [] try: parsed = json.loads(value) - if parsed is None: - return [] - if isinstance(parsed, list): - return [item for item in parsed if item is not None] - return [parsed] + return parsed if isinstance(parsed, list) else [parsed] except (json.JSONDecodeError, TypeError): return [value] if value else [] return [str(value)] @@ -136,24 +117,16 @@ class DynamicArrayField(forms.JSONField): """Handle bound data properly to avoid JSON parsing issues""" if data is None: return initial + # If data is already a list (from our widget), return it as-is if isinstance(data, list): - return [item for item in data if item is not None and str(item).strip()] + return data + # If data is a string, try to parse it as JSON if isinstance(data, str): - if data.strip() == "" or data.strip().lower() == "null": - return [] try: parsed = json.loads(data) - if parsed is None: - return [] - if isinstance(parsed, list): - return [ - item - for item in parsed - if item is not None and str(item).strip() - ] - return [parsed] if str(parsed).strip() else [] + return parsed if isinstance(parsed, list) else [parsed] except (json.JSONDecodeError, TypeError): - return [data] if data and data.strip() else [] + return [data] if data else [] return data def validate(self, value): diff --git a/src/servala/frontend/templates/includes/tabbed_fieldset_form.html b/src/servala/frontend/templates/includes/tabbed_fieldset_form.html index c9d947a..c36f06f 100644 --- a/src/servala/frontend/templates/includes/tabbed_fieldset_form.html +++ b/src/servala/frontend/templates/includes/tabbed_fieldset_form.html @@ -4,7 +4,6 @@ method="post" {% if form_action %}action="{{ form_action }}"{% endif %}> {% csrf_token %} - {% include "frontend/forms/errors.html" %}