Skip to content

Horizontal fieldset breaks in admin and api browser when read_only is False for nested serializers #3704

Closed
@mcastle

Description

@mcastle

There's no error for json. And this doesn't happen for every serializer with a nested serializer - it seems to occur only when the nested serializer itself has a nested serializer. This is using django rest framework version 3.3.1. Here's the traceback:

Environment:


Request Method: GET
Request URL: http://127.0.0.1:8000/api/endpoints/3/

Django Version: 1.8.7
Python Version: 2.7.10

Template error:
In template /Users/user/virtualenvs/ddrsite/lib/python2.7/site-packages/rest_framework/templates/rest_framework/horizontal/fieldset.html, error at line 13
   'unicode' object has no attribute 'items'

   3 :   {% if field.label %}
   4 :     <div class="form-group" style="border-bottom: 1px solid #e5e5e5">
   5 :       <legend class="control-label col-sm-2 {% if style.hide_label %}sr-only{% endif %}" style="border-bottom: 0">
   6 :         {{ field.label }}
   7 :       </legend>
   8 :     </div>
   9 :   {% endif %}
   10 : 
   11 :   {% for nested_field in field %}
   12 :     {% if not nested_field.read_only %}
   13 :        {% render_field nested_field style=style %} 
   14 :     {% endif %}
   15 :   {% endfor %}
   16 : </fieldset>
   17 : 

Traceback:
File "/Users/user/virtualenvs/ddrsite/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
  164.                 response = response.render()
File "/Users/user/virtualenvs/ddrsite/lib/python2.7/site-packages/django/template/response.py" in render
  158.             self.content = self.rendered_content
File "/Users/user/virtualenvs/ddrsite/lib/python2.7/site-packages/rest_framework/response.py" in rendered_content
  71.         ret = renderer.render(self.data, media_type, context)
File "/Users/user/virtualenvs/ddrsite/lib/python2.7/site-packages/rest_framework/renderers.py" in render
  711.         context = self.get_context(data, accepted_media_type, renderer_context)
File "/Users/user/virtualenvs/ddrsite/lib/python2.7/site-packages/rest_framework/renderers.py" in get_context
  738.             data, accepted_media_type, renderer_context
File "/Users/user/virtualenvs/ddrsite/lib/python2.7/site-packages/rest_framework/renderers.py" in get_context
  648.             'put_form': self.get_rendered_html_form(data, view, 'PUT', request),
File "/Users/user/virtualenvs/ddrsite/lib/python2.7/site-packages/rest_framework/renderers.py" in get_rendered_html_form
  499.                 {'style': {'template_pack': 'rest_framework/horizontal'}}
File "/Users/user/virtualenvs/ddrsite/lib/python2.7/site-packages/rest_framework/renderers.py" in render
  357.         return template.render(context)
File "/Users/user/virtualenvs/ddrsite/lib/python2.7/site-packages/django/template/backends/django.py" in render
  74.         return self.template.render(context)
File "/Users/user/virtualenvs/ddrsite/lib/python2.7/site-packages/django/template/base.py" in render
  210.                     return self._render(context)
File "/Users/user/virtualenvs/ddrsite/lib/python2.7/site-packages/django/test/utils.py" in instrumented_test_render
  96.     return self.nodelist.render(context)
File "/Users/user/virtualenvs/ddrsite/lib/python2.7/site-packages/django/template/base.py" in render
  905.                 bit = self.render_node(node, context)
File "/Users/user/virtualenvs/ddrsite/lib/python2.7/site-packages/django/template/debug.py" in render_node
  79.             return node.render(context)
File "/Users/user/virtualenvs/ddrsite/lib/python2.7/site-packages/django/template/defaulttags.py" in render
  217.                             nodelist.append(node.render(context))
File "/Users/user/virtualenvs/ddrsite/lib/python2.7/site-packages/django/template/defaulttags.py" in render
  329.                 return nodelist.render(context)
File "/Users/user/virtualenvs/ddrsite/lib/python2.7/site-packages/django/template/base.py" in render
  905.                 bit = self.render_node(node, context)
File "/Users/user/virtualenvs/ddrsite/lib/python2.7/site-packages/django/template/debug.py" in render_node
  79.             return node.render(context)
File "/Users/user/virtualenvs/ddrsite/lib/python2.7/site-packages/django/template/base.py" in render
  1197.                     return func(*resolved_args, **resolved_kwargs)
File "/Users/user/virtualenvs/ddrsite/lib/python2.7/site-packages/rest_framework/templatetags/rest_framework.py" in render_field
  37.     return renderer.render_field(field, style)
File "/Users/user/virtualenvs/ddrsite/lib/python2.7/site-packages/rest_framework/renderers.py" in render_field
  337.         return template.render(context)
File "/Users/user/virtualenvs/ddrsite/lib/python2.7/site-packages/django/template/backends/django.py" in render
  74.         return self.template.render(context)
File "/Users/user/virtualenvs/ddrsite/lib/python2.7/site-packages/django/template/base.py" in render
  210.                     return self._render(context)
File "/Users/user/virtualenvs/ddrsite/lib/python2.7/site-packages/django/test/utils.py" in instrumented_test_render
  96.     return self.nodelist.render(context)
File "/Users/user/virtualenvs/ddrsite/lib/python2.7/site-packages/django/template/base.py" in render
  905.                 bit = self.render_node(node, context)
File "/Users/user/virtualenvs/ddrsite/lib/python2.7/site-packages/django/template/debug.py" in render_node
  79.             return node.render(context)
File "/Users/user/virtualenvs/ddrsite/lib/python2.7/site-packages/django/template/defaulttags.py" in render
  217.                             nodelist.append(node.render(context))
File "/Users/user/virtualenvs/ddrsite/lib/python2.7/site-packages/django/template/defaulttags.py" in render
  329.                 return nodelist.render(context)
File "/Users/user/virtualenvs/ddrsite/lib/python2.7/site-packages/django/template/base.py" in render
  905.                 bit = self.render_node(node, context)
File "/Users/user/virtualenvs/ddrsite/lib/python2.7/site-packages/django/template/debug.py" in render_node
  79.             return node.render(context)
File "/Users/user/virtualenvs/ddrsite/lib/python2.7/site-packages/django/template/base.py" in render
  1197.                     return func(*resolved_args, **resolved_kwargs)
File "/Users/user/virtualenvs/ddrsite/lib/python2.7/site-packages/rest_framework/templatetags/rest_framework.py" in render_field
  37.     return renderer.render_field(field, style)
File "/Users/user/virtualenvs/ddrsite/lib/python2.7/site-packages/rest_framework/renderers.py" in render_field
  337.         return template.render(context)
File "/Users/user/virtualenvs/ddrsite/lib/python2.7/site-packages/django/template/backends/django.py" in render
  74.         return self.template.render(context)
File "/Users/user/virtualenvs/ddrsite/lib/python2.7/site-packages/django/template/base.py" in render
  210.                     return self._render(context)
File "/Users/user/virtualenvs/ddrsite/lib/python2.7/site-packages/django/test/utils.py" in instrumented_test_render
  96.     return self.nodelist.render(context)
File "/Users/user/virtualenvs/ddrsite/lib/python2.7/site-packages/django/template/base.py" in render
  905.                 bit = self.render_node(node, context)
File "/Users/user/virtualenvs/ddrsite/lib/python2.7/site-packages/django/template/debug.py" in render_node
  79.             return node.render(context)
File "/Users/user/virtualenvs/ddrsite/lib/python2.7/site-packages/django/template/defaulttags.py" in render
  217.                             nodelist.append(node.render(context))
File "/Users/user/virtualenvs/ddrsite/lib/python2.7/site-packages/django/template/defaulttags.py" in render
  329.                 return nodelist.render(context)
File "/Users/user/virtualenvs/ddrsite/lib/python2.7/site-packages/django/template/base.py" in render
  905.                 bit = self.render_node(node, context)
File "/Users/user/virtualenvs/ddrsite/lib/python2.7/site-packages/django/template/debug.py" in render_node
  79.             return node.render(context)
File "/Users/user/virtualenvs/ddrsite/lib/python2.7/site-packages/django/template/base.py" in render
  1197.                     return func(*resolved_args, **resolved_kwargs)
File "/Users/user/virtualenvs/ddrsite/lib/python2.7/site-packages/rest_framework/templatetags/rest_framework.py" in render_field
  37.     return renderer.render_field(field, style)
File "/Users/user/virtualenvs/ddrsite/lib/python2.7/site-packages/rest_framework/renderers.py" in render_field
  325.         field = field.as_form_field()
File "/Users/user/virtualenvs/ddrsite/lib/python2.7/site-packages/rest_framework/utils/serializer_helpers.py" in as_form_field
  111.         for key, value in self.value.items():

Exception Type: AttributeError at /api/endpoints/3/
Exception Value: 'unicode' object has no attribute 'items'

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions