#33927: Rendering an ArrayField as read-only in admin raises TypeError -----------------------------------------+------------------------ Reporter: David Svenson | Owner: nobody Type: Bug | Status: new Component: contrib.admin | Version: 3.2 Severity: Normal | Keywords: Triage Stage: Unreviewed | Has patch: 0 Needs documentation: 0 | Needs tests: 0 Patch needs improvement: 0 | Easy pickings: 0 UI/UX: 0 | -----------------------------------------+------------------------ If an ''ArrayField'' is included in an ''admin.ModelAdmin'' and ''has_change_permission'' returns ''False'' (making the field read-only), an exception is thrown when the field is supposed to be rendered.
This is the stacktrace after Django tries to render the field in ''django/contrib/admin/templates/admin/includes/fieldset.html'' {{{ Traceback (most recent call last): File ".venv/lib/python3.10/site- packages/django/core/handlers/exception.py", line 47, in inner response = get_response(request) File ".venv/lib/python3.10/site-packages/django/core/handlers/base.py", line 204, in _get_response response = response.render() File ".venv/lib/python3.10/site-packages/django/template/response.py", line 105, in render self.content = self.rendered_content File ".venv/lib/python3.10/site-packages/django/template/response.py", line 83, in rendered_content return template.render(context, self._request) File ".venv/lib/python3.10/site- packages/django/template/backends/django.py", line 61, in render return self.template.render(context) File ".venv/lib/python3.10/site-packages/django/template/base.py", line 170, in render return self._render(context) File ".venv/lib/python3.10/site-packages/django/template/base.py", line 162, in _render return self.nodelist.render(context) File ".venv/lib/python3.10/site-packages/django/template/base.py", line 938, in render bit = node.render_annotated(context) File ".venv/lib/python3.10/site-packages/django/template/base.py", line 905, in render_annotated return self.render(context) File ".venv/lib/python3.10/site- packages/django/template/loader_tags.py", line 150, in render return compiled_parent._render(context) File ".venv/lib/python3.10/site-packages/django/template/base.py", line 162, in _render return self.nodelist.render(context) File ".venv/lib/python3.10/site-packages/django/template/base.py", line 938, in render bit = node.render_annotated(context) File ".venv/lib/python3.10/site-packages/django/template/base.py", line 905, in render_annotated return self.render(context) File ".venv/lib/python3.10/site- packages/django/template/loader_tags.py", line 150, in render return compiled_parent._render(context) File ".venv/lib/python3.10/site-packages/django/template/base.py", line 162, in _render return self.nodelist.render(context) File ".venv/lib/python3.10/site-packages/django/template/base.py", line 938, in render bit = node.render_annotated(context) File ".venv/lib/python3.10/site-packages/django/template/base.py", line 905, in render_annotated return self.render(context) File ".venv/lib/python3.10/site- packages/django/template/loader_tags.py", line 62, in render result = block.nodelist.render(context) File ".venv/lib/python3.10/site-packages/django/template/base.py", line 938, in render bit = node.render_annotated(context) File ".venv/lib/python3.10/site-packages/django/template/base.py", line 905, in render_annotated return self.render(context) File ".venv/lib/python3.10/site- packages/django/template/loader_tags.py", line 62, in render result = block.nodelist.render(context) File ".venv/lib/python3.10/site-packages/django/template/base.py", line 938, in render bit = node.render_annotated(context) File ".venv/lib/python3.10/site-packages/django/template/base.py", line 905, in render_annotated return self.render(context) File ".venv/lib/python3.10/site- packages/django/template/defaulttags.py", line 214, in render nodelist.append(node.render_annotated(context)) File ".venv/lib/python3.10/site-packages/django/template/base.py", line 905, in render_annotated return self.render(context) File ".venv/lib/python3.10/site- packages/django/template/loader_tags.py", line 195, in render return template.render(context) File ".venv/lib/python3.10/site-packages/django/template/base.py", line 172, in render return self._render(context) File ".venv/lib/python3.10/site-packages/django/template/base.py", line 162, in _render return self.nodelist.render(context) File ".venv/lib/python3.10/site-packages/django/template/base.py", line 938, in render bit = node.render_annotated(context) File ".venv/lib/python3.10/site-packages/django/template/base.py", line 905, in render_annotated return self.render(context) File ".venv/lib/python3.10/site- packages/django/template/defaulttags.py", line 214, in render nodelist.append(node.render_annotated(context)) File ".venv/lib/python3.10/site-packages/django/template/base.py", line 905, in render_annotated return self.render(context) File ".venv/lib/python3.10/site- packages/django/template/defaulttags.py", line 214, in render nodelist.append(node.render_annotated(context)) File ".venv/lib/python3.10/site-packages/django/template/base.py", line 905, in render_annotated return self.render(context) File ".venv/lib/python3.10/site- packages/django/template/defaulttags.py", line 315, in render return nodelist.render(context) File ".venv/lib/python3.10/site-packages/django/template/base.py", line 938, in render bit = node.render_annotated(context) File ".venv/lib/python3.10/site-packages/django/template/base.py", line 905, in render_annotated return self.render(context) File ".venv/lib/python3.10/site- packages/django/template/defaulttags.py", line 315, in render return nodelist.render(context) File ".venv/lib/python3.10/site-packages/django/template/base.py", line 938, in render bit = node.render_annotated(context) File ".venv/lib/python3.10/site-packages/django/template/base.py", line 905, in render_annotated return self.render(context) File ".venv/lib/python3.10/site-packages/django/template/base.py", line 988, in render output = self.filter_expression.resolve(context) File ".venv/lib/python3.10/site-packages/django/template/base.py", line 671, in resolve obj = self.var.resolve(context) File ".venv/lib/python3.10/site-packages/django/template/base.py", line 796, in resolve value = self._resolve_lookup(context) File ".venv/lib/python3.10/site-packages/django/template/base.py", line 858, in _resolve_lookup current = current() File ".venv/lib/python3.10/site- packages/django/contrib/admin/helpers.py", line 239, in contents result_repr = display_for_field(value, f, self.empty_value_display) File ".venv/lib/python3.10/site-packages/django/contrib/admin/utils.py", line 385, in display_for_field return dict(field.flatchoices).get(value, empty_value_display) Exception Type: TypeError at /admin/companies/company/1/change/ Exception Value: unhashable type: 'list' }}} I haven't given much thought to how to solve this but I guess either ''contents'' or ''display_for_field'' has to handle the ArrayField or there should be some way to call ''get_FOO_display'' in this case. -- Ticket URL: <https://code.djangoproject.com/ticket/33927> Django <https://code.djangoproject.com/> The Web framework for perfectionists with deadlines. -- You received this message because you are subscribed to the Google Groups "Django updates" group. To unsubscribe from this group and stop receiving emails from it, send an email to django-updates+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/django-updates/01070182a6e44e90-6b8b7867-fd46-42c9-9682-0c5398888882-000000%40eu-central-1.amazonses.com.