summaryrefslogtreecommitdiff
path: root/django
diff options
context:
space:
mode:
authorDavid Wobrock <david.wobrock@gmail.com>2022-08-22 23:30:14 +0200
committerCarlton Gibson <carlton@noumenal.es>2022-08-23 15:51:42 +0200
commit897f38fabea5e1b196f11250ff6dadfffa489840 (patch)
treedf26436ba26484c23809978af9b6732a593ee35e /django
parent4488a25cc93eab28fc25ffc464e08f075642fa27 (diff)
Fixed #33927 -- Fixed crash when displaying ArrayField with choices in admin.
Diffstat (limited to 'django')
-rw-r--r--django/contrib/admin/utils.py10
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):