From cb78306d5861c3e6abad4311feeccdcf593f02a8 Mon Sep 17 00:00:00 2001 From: Bryan Brancotte <bryan.brancotte@pasteur.fr> Date: Wed, 14 Aug 2019 18:28:56 +0200 Subject: [PATCH] Refactoring CharFieldDataList to extract DataList ability in an abstract class, adding IntegerFieldDataList --- ippisite/ippidb/forms.py | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/ippisite/ippidb/forms.py b/ippisite/ippidb/forms.py index 303ec003..77fb57d7 100644 --- a/ippisite/ippidb/forms.py +++ b/ippisite/ippidb/forms.py @@ -17,20 +17,35 @@ from .models import * from .ws import pdb_entry_exists -class CharFieldDataList(forms.CharField): - def __init__(self, data_class=None, data_attr=None, *args, **kwargs): +class FieldDataList(forms.CharField): + class Meta: + abstract = True + + def __init__(self, data_class=None, data_attr=None, data_list=None, *args, **kwargs): self.data_class = data_class self.data_attr = data_attr + self.data_list = data_list super().__init__(*args, **kwargs) def widget_attrs(self, widget): attrs = super().widget_attrs(widget) if self.data_class is not None and self.data_attr is not None and not widget.is_hidden: # The HTML element is datalist, not data_list. - attrs['datalist'] = self.data_class.objects.values_list(self.data_attr, flat=True).order_by(Upper(self.data_attr)).distinct() + attrs['datalist'] = self.data_class.objects.values_list(self.data_attr, flat=True).order_by( + Upper(self.data_attr)).distinct() + if self.data_list is not None and len(self.data_list) > 0: + attrs['datalist'] = self.data_list return attrs +class CharFieldDataList(FieldDataList, forms.CharField): + pass + + +class IntegerFieldDataList(FieldDataList, forms.IntegerField): + pass + + class BoostrapSelectMultiple(forms.SelectMultiple): def __init__(self, allSelectedText, nonSelectedText, SelectedText, attrs=None, *args, **kwargs): if attrs is not None: -- GitLab