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: