diff --git a/django_better_admin_arrayfield/forms/fields.py b/django_better_admin_arrayfield/forms/fields.py index 1e15393..84e59c3 100644 --- a/django_better_admin_arrayfield/forms/fields.py +++ b/django_better_admin_arrayfield/forms/fields.py @@ -7,7 +7,7 @@ from django_better_admin_arrayfield.forms.widgets import DynamicArrayWidget -class DynamicArrayField(forms.Field): +class DynamicArrayField(forms.ChoiceField): default_error_messages = { "item_invalid": _("Item %(nth)s in the array did not validate: "), @@ -19,6 +19,8 @@ def __init__(self, base_field, **kwargs): self.default = kwargs.pop("default", None) kwargs.setdefault("widget", DynamicArrayWidget) super().__init__(**kwargs) + if hasattr(base_field, "choices"): + self.choices = base_field.choices def clean(self, value): cleaned_data = [] diff --git a/django_better_admin_arrayfield/forms/widgets.py b/django_better_admin_arrayfield/forms/widgets.py index f0a57ae..fc9b567 100644 --- a/django_better_admin_arrayfield/forms/widgets.py +++ b/django_better_admin_arrayfield/forms/widgets.py @@ -9,6 +9,12 @@ def __init__(self, *args, **kwargs): self.subwidget_form = kwargs.pop("subwidget_form", forms.TextInput) super().__init__(*args, **kwargs) + def create_subwidget(self): + if hasattr(self, "choices") and len(self.choices): + return forms.Select(choices=self.choices) + else: + return self.subwidget_form() + def get_context(self, name, value, attrs): context_value = value or [""] context = super().get_context(name, context_value, attrs) @@ -21,7 +27,7 @@ def get_context(self, name, value, attrs): widget_attrs = final_attrs.copy() if id_: widget_attrs["id"] = "{id_}_{index}".format(id_=id_, index=index) - widget = self.subwidget_form() + widget = self.create_subwidget() widget.is_required = self.is_required subwidgets.append(widget.get_context(name, item, widget_attrs)["widget"])