#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 [email protected].
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