From 6ca710867278b0a886c1a6c0c9bbfbacf80dd597 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20Kami=C5=84ski?= <33148232+robert8888@users.noreply.github.com> Date: Tue, 30 Mar 2021 19:39:53 +0200 Subject: [PATCH 1/6] Change class base to ChoiceField When it base on choice field the it inherits choice validator which work ok even if there is not choices. Now it's copy 'choices' options from base field. --- django_better_admin_arrayfield/forms/fields.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/django_better_admin_arrayfield/forms/fields.py b/django_better_admin_arrayfield/forms/fields.py index 1e15393..9c4fc4b 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,9 @@ 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 = [] From 76907bac25ec6d752953d17f1822ef460be2fba5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20Kami=C5=84ski?= <33148232+robert8888@users.noreply.github.com> Date: Tue, 30 Mar 2021 19:50:41 +0200 Subject: [PATCH 2/6] Handle choices Together with witch changing base class of DynamicArrayField to ChoiceField now when are available choices in base_field it is rendered as Select. --- django_better_admin_arrayfield/forms/widgets.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/django_better_admin_arrayfield/forms/widgets.py b/django_better_admin_arrayfield/forms/widgets.py index f0a57ae..856e337 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"]) From 2b58484ccbe453d5257028b13b74c0202ba22151 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20Kami=C5=84ski?= <33148232+robert8888@users.noreply.github.com> Date: Tue, 30 Mar 2021 20:23:15 +0200 Subject: [PATCH 3/6] Update widgets.py --- django_better_admin_arrayfield/forms/widgets.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/django_better_admin_arrayfield/forms/widgets.py b/django_better_admin_arrayfield/forms/widgets.py index 856e337..7e299b4 100644 --- a/django_better_admin_arrayfield/forms/widgets.py +++ b/django_better_admin_arrayfield/forms/widgets.py @@ -10,9 +10,9 @@ def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) def create_subwidget(self): - if hasattr(self, 'choices') and len(self.choices): - return forms.Select(choices = self.choices) - else: + 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): From 6b417458df6255a0e2d1f5492a06114ac763e471 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20Kami=C5=84ski?= <33148232+robert8888@users.noreply.github.com> Date: Tue, 30 Mar 2021 20:24:31 +0200 Subject: [PATCH 4/6] lint suggestion lint suggestion --- django_better_admin_arrayfield/forms/fields.py | 1 - 1 file changed, 1 deletion(-) diff --git a/django_better_admin_arrayfield/forms/fields.py b/django_better_admin_arrayfield/forms/fields.py index 9c4fc4b..7eeb98d 100644 --- a/django_better_admin_arrayfield/forms/fields.py +++ b/django_better_admin_arrayfield/forms/fields.py @@ -19,7 +19,6 @@ 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 From 2d522e22a101b01210bc34c3ed2d664e2f2754c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20Kami=C5=84ski?= <33148232+robert8888@users.noreply.github.com> Date: Tue, 30 Mar 2021 20:37:45 +0200 Subject: [PATCH 5/6] lint lint --- django_better_admin_arrayfield/forms/widgets.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/django_better_admin_arrayfield/forms/widgets.py b/django_better_admin_arrayfield/forms/widgets.py index 7e299b4..fc9b567 100644 --- a/django_better_admin_arrayfield/forms/widgets.py +++ b/django_better_admin_arrayfield/forms/widgets.py @@ -10,11 +10,11 @@ def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) def create_subwidget(self): - if hasattr(self, 'choices') and len(self.choices): + 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) From 5032ccc15db69bde47d7fadf45face6e397f99d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20Kami=C5=84ski?= <33148232+robert8888@users.noreply.github.com> Date: Tue, 30 Mar 2021 20:41:06 +0200 Subject: [PATCH 6/6] lint lint --- django_better_admin_arrayfield/forms/fields.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/django_better_admin_arrayfield/forms/fields.py b/django_better_admin_arrayfield/forms/fields.py index 7eeb98d..84e59c3 100644 --- a/django_better_admin_arrayfield/forms/fields.py +++ b/django_better_admin_arrayfield/forms/fields.py @@ -19,7 +19,7 @@ def __init__(self, base_field, **kwargs): self.default = kwargs.pop("default", None) kwargs.setdefault("widget", DynamicArrayWidget) super().__init__(**kwargs) - if hasattr(base_field, 'choices'): + if hasattr(base_field, "choices"): self.choices = base_field.choices def clean(self, value):