diff options
| author | David Wobrock <david.wobrock@gmail.com> | 2022-08-22 23:30:14 +0200 |
|---|---|---|
| committer | Carlton Gibson <carlton@noumenal.es> | 2022-08-23 15:51:42 +0200 |
| commit | 897f38fabea5e1b196f11250ff6dadfffa489840 (patch) | |
| tree | df26436ba26484c23809978af9b6732a593ee35e /django | |
| parent | 4488a25cc93eab28fc25ffc464e08f075642fa27 (diff) | |
Fixed #33927 -- Fixed crash when displaying ArrayField with choices in admin.
Diffstat (limited to 'django')
| -rw-r--r-- | django/contrib/admin/utils.py | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/django/contrib/admin/utils.py b/django/contrib/admin/utils.py index 6cb549fb10..b971bd528f 100644 --- a/django/contrib/admin/utils.py +++ b/django/contrib/admin/utils.py @@ -10,6 +10,7 @@ from django.db.models.deletion import Collector from django.forms.utils import pretty_name from django.urls import NoReverseMatch, reverse from django.utils import formats, timezone +from django.utils.hashable import make_hashable from django.utils.html import format_html from django.utils.regex_helper import _lazy_re_compile from django.utils.text import capfirst @@ -401,7 +402,14 @@ def display_for_field(value, field, empty_value_display): from django.contrib.admin.templatetags.admin_list import _boolean_icon if getattr(field, "flatchoices", None): - return dict(field.flatchoices).get(value, empty_value_display) + try: + return dict(field.flatchoices).get(value, empty_value_display) + except TypeError: + # Allow list-like choices. + flatchoices = make_hashable(field.flatchoices) + value = make_hashable(value) + return dict(flatchoices).get(value, empty_value_display) + # BooleanField needs special-case null-handling, so it comes before the # general null test. elif isinstance(field, models.BooleanField): |
