#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.

Reply via email to