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)