diff --git a/ippisite/ippidb/forms.py b/ippisite/ippidb/forms.py index 303ec003b19ab064de9b592f68a1c2fae2e14569..77fb57d72d2f6ebde6b05459ca6e8485320d8870 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: