Skip to content

Commit 913572f

Browse files
committed
Fix support for Django 5.0
1 parent e7492a5 commit 913572f

File tree

2 files changed

+14
-4
lines changed

2 files changed

+14
-4
lines changed

pyproject.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ classifiers = [
1515
"Framework :: Django :: 3.2",
1616
"Framework :: Django :: 4.0",
1717
"Framework :: Django :: 4.1",
18+
"Framework :: Django :: 4.2",
19+
"Framework :: Django :: 5.0",
1820
"Intended Audience :: Developers",
1921
"Operating System :: OS Independent",
2022
]

src/django_admin_multi_select_filter/filters.py

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@ def __init__(self, field, request, params, model, model_admin, field_path):
1616
self.lookup_val = self.used_parameters.get(self.lookup_kwarg, [])
1717
if len(self.lookup_val) == 1 and self.lookup_val[0] == "":
1818
self.lookup_val = []
19+
elif len(self.lookup_val) == 1 and type(self.lookup_val[0]) != str:
20+
# In Django 5.0, we get an extra list
21+
self.lookup_val = self.lookup_val[0]
1922
self.lookup_val_isnull = self.used_parameters.get(self.lookup_kwarg_isnull)
2023

2124
self.empty_value_display = model_admin.get_empty_value_display()
@@ -30,9 +33,10 @@ def __init__(self, field, request, params, model, model_admin, field_path):
3033
)
3134
self.field_verboses = {}
3235
if self.field.choices:
33-
self.field_verboses = {field_value: field_verbose for
34-
field_value, field_verbose in
35-
self.field.choices}
36+
self.field_verboses = {
37+
field_value: field_verbose
38+
for field_value, field_verbose in self.field.choices
39+
}
3640

3741
def expected_parameters(self):
3842
return [self.lookup_kwarg, self.lookup_kwarg_isnull]
@@ -91,12 +95,16 @@ def __init__(self, field, request, params, model, model_admin, field_path):
9195
self.lookup_kwarg = "%s__%s__in" % (field_path, field.target_field.name)
9296
self.lookup_kwarg_isnull = "%s__isnull" % field_path
9397
values = params.get(self.lookup_kwarg, [])
98+
if len(values) == 1 and type(values[0]) != str:
99+
# In Django 5.0, we get an extra list
100+
values = values[0]
94101
self.lookup_val = values.split(",") if values else []
95102
self.lookup_choices = self.field_choices(field, request, model_admin)
96103

97104
def choices(self, changelist):
98105
yield {
99-
"selected": self.lookup_val is None and not self.lookup_val_isnull,
106+
"selected": (self.lookup_val is None or self.lookup_val == [])
107+
and not self.lookup_val_isnull,
100108
"query_string": changelist.get_query_string(
101109
remove=[self.lookup_kwarg, self.lookup_kwarg_isnull]
102110
),

0 commit comments

Comments
 (0)