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