diff --git a/program/filters.py b/program/filters.py
index 4afad05123e8bfaabd7a2ada8996d6a881e8c76c..7e8a3eb7216dd0947bf1752b42655e04f15b9cd8 100644
--- a/program/filters.py
+++ b/program/filters.py
@@ -20,8 +20,19 @@ class StaticFilterHelpTextMixin:
 
 
 class ModelMultipleChoiceFilter(filters.ModelMultipleChoiceFilter):
+    class QueryArrayWidget(widgets.QueryArrayWidget):
+        # see: https://github.com/carltongibson/django-filter/issues/1047
+        def value_from_datadict(self, data, files, name):
+            new_data = {}
+            for key in data.keys():
+                if len(data.getlist(key)) == 1 and "," in data[key]:
+                    new_data[key] = data[key]
+                else:
+                    new_data[key] = data.getlist(key)
+            return super().value_from_datadict(new_data, files, name)
+
     def __init__(self, *args, **kwargs):
-        kwargs.setdefault("widget", widgets.CSVWidget())
+        kwargs.setdefault("widget", self.QueryArrayWidget())
         kwargs["lookup_expr"] = "in"
         super().__init__(*args, **kwargs)