Fixes BrowsableAPIRenderer
for usage with ListSerializer
. by NiyazNz · Pull Request #7530 · encode/django-rest-framework (original) (raw)
When using ListSerializer as viewset serializer_class rendering of view in BrowsableAPI fails with:
Internal Server Error: /api/snippets/
Traceback (most recent call last):
File "/home/nz/.local/lib/virtualenvs/django-rest-framework-demo/lib/python3.11/site-packages/django/core/handlers/exception.py", line 55, in inner
response = get_response(request)
^^^^^^^^^^^^^^^^^^^^^
File "/home/nz/.local/lib/virtualenvs/django-rest-framework-demo/lib/python3.11/site-packages/django/core/handlers/base.py", line 220, in _get_response
response = response.render()
^^^^^^^^^^^^^^^^^
File "/home/nz/.local/lib/virtualenvs/django-rest-framework-demo/lib/python3.11/site-packages/django/template/response.py", line 114, in render
self.content = self.rendered_content
^^^^^^^^^^^^^^^^^^^^^
File "/home/nz/dev/.oss/django-rest-framework/rest_framework/response.py", line 74, in rendered_content
ret = renderer.render(self.data, accepted_media_type, context)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/nz/dev/.oss/django-rest-framework/rest_framework/renderers.py", line 725, in render
context = self.get_context(data, accepted_media_type, renderer_context)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/nz/dev/.oss/django-rest-framework/rest_framework/renderers.py", line 656, in get_context
raw_data_post_form = self.get_raw_data_form(data, view, 'POST', request)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/nz/dev/.oss/django-rest-framework/rest_framework/renderers.py", line 564, in get_raw_data_form
for name, field in serializer.fields.items():
^^^^^^^^^^^^^^^^^
AttributeError: 'MultipleSnippetSerializer' object has no attribute 'fields'
[12/Jun/2023 08:41:53] "GET /api/snippets/ HTTP/1.1" 500 97475
BrowsableAPIRenderer cannot render multiple objects in HTML form and should render list example in Raw data.
This PR fixes the issue described above by rendering list of items in Raw data tab and not rendering HTML data tab while ListSerializer is used for viewset serializer_class.