Cannot access '/patches/{patchID}' API if a project admin · Issue #379 · getpatchwork/patchwork (original) (raw)

As noted on the mailing list, the introduction of the related field in the aforementioned API means logged in users that have admin privileges cannot display this page. Instead, they see the following traceback:

web_1  | Internal Server Error: /api/patches/1/
web_1  | Traceback (most recent call last):
web_1  |   File "/opt/pyenv/versions/3.8.2/lib/python3.8/site-packages/django/core/handlers/exception.py", line 34, in inner
web_1  |     response = get_response(request)
web_1  |   File "/opt/pyenv/versions/3.8.2/lib/python3.8/site-packages/django/core/handlers/base.py", line 145, in _get_response
web_1  |     response = self.process_exception_by_middleware(e, request)
web_1  |   File "/opt/pyenv/versions/3.8.2/lib/python3.8/site-packages/django/core/handlers/base.py", line 143, in _get_response
web_1  |     response = response.render()
web_1  |   File "/opt/pyenv/versions/3.8.2/lib/python3.8/site-packages/django/template/response.py", line 105, in render
web_1  |     self.content = self.rendered_content
web_1  |   File "/opt/pyenv/versions/3.8.2/lib/python3.8/site-packages/rest_framework/response.py", line 70, in rendered_content
web_1  |     ret = renderer.render(self.data, accepted_media_type, context)
web_1  |   File "/opt/pyenv/versions/3.8.2/lib/python3.8/site-packages/rest_framework/renderers.py", line 724, in render
web_1  |     context = self.get_context(data, accepted_media_type, renderer_context)
web_1  |   File "/opt/pyenv/versions/3.8.2/lib/python3.8/site-packages/rest_framework/renderers.py", line 695, in get_context
web_1  |     'put_form': self.get_rendered_html_form(data, view, 'PUT', request),
web_1  |   File "/opt/pyenv/versions/3.8.2/lib/python3.8/site-packages/rest_framework/renderers.py", line 511, in get_rendered_html_form
web_1  |     return self.render_form_for_serializer(serializer)
web_1  |   File "/opt/pyenv/versions/3.8.2/lib/python3.8/site-packages/rest_framework/renderers.py", line 518, in render_form_for_serializer
web_1  |     return form_renderer.render(
web_1  |   File "/opt/pyenv/versions/3.8.2/lib/python3.8/site-packages/rest_framework/renderers.py", line 372, in render
web_1  |     return template.render(context)
web_1  |   File "/opt/pyenv/versions/3.8.2/lib/python3.8/site-packages/django/template/backends/django.py", line 61, in render
web_1  |     return self.template.render(context)
web_1  |   File "/opt/pyenv/versions/3.8.2/lib/python3.8/site-packages/django/template/base.py", line 171, in render
web_1  |     return self._render(context)
web_1  |   File "/opt/pyenv/versions/3.8.2/lib/python3.8/site-packages/django/test/utils.py", line 95, in instrumented_test_render
web_1  |     return self.nodelist.render(context)
web_1  |   File "/opt/pyenv/versions/3.8.2/lib/python3.8/site-packages/django/template/base.py", line 936, in render
web_1  |     bit = node.render_annotated(context)
web_1  |   File "/opt/pyenv/versions/3.8.2/lib/python3.8/site-packages/django/template/base.py", line 903, in render_annotated
web_1  |     return self.render(context)
web_1  |   File "/opt/pyenv/versions/3.8.2/lib/python3.8/site-packages/django/template/defaulttags.py", line 209, in render
web_1  |     nodelist.append(node.render_annotated(context))
web_1  |   File "/opt/pyenv/versions/3.8.2/lib/python3.8/site-packages/django/template/base.py", line 903, in render_annotated
web_1  |     return self.render(context)
web_1  |   File "/opt/pyenv/versions/3.8.2/lib/python3.8/site-packages/django/template/defaulttags.py", line 309, in render
web_1  |     return nodelist.render(context)
web_1  |   File "/opt/pyenv/versions/3.8.2/lib/python3.8/site-packages/django/template/base.py", line 936, in render
web_1  |     bit = node.render_annotated(context)
web_1  |   File "/opt/pyenv/versions/3.8.2/lib/python3.8/site-packages/django/template/base.py", line 903, in render_annotated
web_1  |     return self.render(context)
web_1  |   File "/opt/pyenv/versions/3.8.2/lib/python3.8/site-packages/django/template/library.py", line 192, in render
web_1  |     output = self.func(*resolved_args, **resolved_kwargs)
web_1  |   File "/opt/pyenv/versions/3.8.2/lib/python3.8/site-packages/rest_framework/templatetags/rest_framework.py", line 87, in render_field
web_1  |     return renderer.render_field(field, style)
web_1  |   File "/opt/pyenv/versions/3.8.2/lib/python3.8/site-packages/rest_framework/renderers.py", line 339, in render_field
web_1  |     field = field.as_form_field()
web_1  |   File "/opt/pyenv/versions/3.8.2/lib/python3.8/site-packages/rest_framework/utils/serializer_helpers.py", line 122, in as_form_field
web_1  |     for key, value in self.value.items():
web_1  | AttributeError: 'list' object has no attribute 'items'
web_1  | "GET /api/patches/1/ HTTP/1.1" 500 235336

A quick investigation suggests that this is because the form that allows you to edit the individual entry is not able to render. This is likely because we're changing type from a list of things that would be displayed normally: