-
Notifications
You must be signed in to change notification settings - Fork 299
Description
I have a simple test setup and I tired using the latest djangorestframework==3.4.4 and it fails. (everything works fine with djangorestframework==3.4.3)
The error get when trying to open the list view for this model is:
TypeError: unhashable type: 'OrderedDict'
I see they have some recent commits which have the type OrderedDict mentioned, so it looks like they may have inadvertently broken something, not sure...
My setup is:
Requirements:
`
django==1.9
unipath==1.1
mysqlclient==1.3.7
django-admin-bootstrapped==2.5.7
simple-crypt==4.1.7
django-smart-autoregister==0.0.3
django-custom-user==0.6
djangorestframework==3.4.4 # broken with json api
djangorestframework==3.4.3
djangorestframework-jsonapi==2.0.1
`
Serializers:
`
from app_core.models import UserAccount
from rest_framework_json_api import serializers
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = UserAccount
`
Views:
`
from app_core.models import UserAccount
from rest_framework import viewsets
from API.serializers import UserSerializer
class UserViewSet(viewsets.ModelViewSet):
"""
API endpoint that allows users to be viewed or edited.
"""
queryset = UserAccount.objects.all()
serializer_class = UserSerializer
`
Urls:
`
from django.conf.urls import url, include
from rest_framework import routers
from API import views as api_views
router = routers.DefaultRouter()
router.register(r'users', api_views.UserViewSet)
urlpatterns = [
url(r'^', include(router.urls)),
url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]
`
Traceback:
`
Environment:
Request Method: GET
Request URL: http://192.168.99.100:8000/api/users/
Django Version: 1.9
Python Version: 3.4.5
Installed Applications:
('django_admin_bootstrapped',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'custom_user',
'rest_framework',
'app_core',
'website')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware')
Template error:
In template /usr/local/lib/python3.4/site-packages/rest_framework/templates/rest_framework/horizontal/select_multiple.html, error at line 15
unhashable type: 'OrderedDict' 5 :
6 :
7 : {% if field.label %}
8 :
9 : {{ field.label }}
10 :
11 : {% endif %}
12 :
13 :
14 : <select multiple {{ field.choices|yesno:",disabled" }} class="form-control" name="{{ field.name }}">
15 : {% for select in field.iter_options %}
16 : {% if select.start_option_group %}
17 :
18 : {% elif select.end_option_group %}
19 :
20 : {% else %}
21 : <option value="{{ select.value }}" {% if select.value|as_string in field.value|as_list_of_strings %}selected{% endif %} {% if select.disabled %}disabled{% endif %}>{{ select.display_text }}
22 : {% endif %}
23 : {% empty %}
24 : {{ no_items }}
25 : {% endfor %}
Traceback:
File "/usr/local/lib/python3.4/site-packages/django/core/handlers/base.py" in get_response
-
response = self.process_exception_by_middleware(e, request)
File "/usr/local/lib/python3.4/site-packages/django/core/handlers/base.py" in get_response
-
response = response.render()
File "/usr/local/lib/python3.4/site-packages/django/template/response.py" in render
-
self.content = self.rendered_content
File "/usr/local/lib/python3.4/site-packages/rest_framework/response.py" in rendered_content
-
ret = renderer.render(self.data, accepted_media_type, context)
File "/usr/local/lib/python3.4/site-packages/rest_framework/renderers.py" in render
-
context = self.get_context(data, accepted_media_type, renderer_context)
File "/usr/local/lib/python3.4/site-packages/rest_framework/renderers.py" in get_context
-
'post_form': self.get_rendered_html_form(data, view, 'POST', request),
File "/usr/local/lib/python3.4/site-packages/rest_framework/renderers.py" in get_rendered_html_form
-
return self.render_form_for_serializer(serializer)
File "/usr/local/lib/python3.4/site-packages/rest_framework/renderers.py" in render_form_for_serializer
-
{'style': {'template_pack': 'rest_framework/horizontal'}}
File "/usr/local/lib/python3.4/site-packages/rest_framework/renderers.py" in render
-
return template_render(template, context)
File "/usr/local/lib/python3.4/site-packages/rest_framework/compat.py" in template_render
-
return template.render(context, request=request)
File "/usr/local/lib/python3.4/site-packages/django/template/backends/django.py" in render
-
return self.template.render(context)
File "/usr/local/lib/python3.4/site-packages/django/template/base.py" in render
-
return self._render(context)
File "/usr/local/lib/python3.4/site-packages/django/template/base.py" in _render
-
return self.nodelist.render(context)
File "/usr/local/lib/python3.4/site-packages/django/template/base.py" in render
-
bit = node.render_annotated(context)
File "/usr/local/lib/python3.4/site-packages/django/template/base.py" in render_annotated
-
return self.render(context)
File "/usr/local/lib/python3.4/site-packages/django/template/defaulttags.py" in render
-
nodelist.append(node.render_annotated(context))
File "/usr/local/lib/python3.4/site-packages/django/template/base.py" in render_annotated
-
return self.render(context)
File "/usr/local/lib/python3.4/site-packages/django/template/defaulttags.py" in render
-
return nodelist.render(context)
File "/usr/local/lib/python3.4/site-packages/django/template/base.py" in render
-
bit = node.render_annotated(context)
File "/usr/local/lib/python3.4/site-packages/django/template/base.py" in render_annotated
-
return self.render(context)
File "/usr/local/lib/python3.4/site-packages/django/template/library.py" in render
-
output = self.func(_resolved_args, *_resolved_kwargs)
File "/usr/local/lib/python3.4/site-packages/rest_framework/templatetags/rest_framework.py" in render_field
-
return renderer.render_field(field, style)
File "/usr/local/lib/python3.4/site-packages/rest_framework/renderers.py" in render_field
-
return template_render(template, context)
File "/usr/local/lib/python3.4/site-packages/rest_framework/compat.py" in template_render
-
return template.render(context, request=request)
File "/usr/local/lib/python3.4/site-packages/django/template/backends/django.py" in render
-
return self.template.render(context)
File "/usr/local/lib/python3.4/site-packages/django/template/base.py" in render
-
return self._render(context)
File "/usr/local/lib/python3.4/site-packages/django/template/base.py" in _render
-
return self.nodelist.render(context)
File "/usr/local/lib/python3.4/site-packages/django/template/base.py" in render
-
bit = node.render_annotated(context)
File "/usr/local/lib/python3.4/site-packages/django/template/base.py" in render_annotated
-
return self.render(context)
File "/usr/local/lib/python3.4/site-packages/django/template/defaulttags.py" in render
-
values = self.sequence.resolve(context, True)
File "/usr/local/lib/python3.4/site-packages/django/template/base.py" in resolve
-
obj = self.var.resolve(context)
File "/usr/local/lib/python3.4/site-packages/django/template/base.py" in resolve
-
value = self._resolve_lookup(context)
File "/usr/local/lib/python3.4/site-packages/django/template/base.py" in _resolve_lookup
-
current = current()
File "/usr/local/lib/python3.4/site-packages/rest_framework/relations.py" in iter_options
-
self.get_choices(cutoff=self.html_cutoff),
File "/usr/local/lib/python3.4/site-packages/rest_framework/relations.py" in get_choices
-
return self.child_relation.get_choices(cutoff)
File "/usr/local/lib/python3.4/site-packages/rest_framework/relations.py" in get_choices
-
for item in queryset
File "/usr/local/lib/python3.4/collections/init.py" in init
-
self.__update(_args, *_kwds)
File "/usr/local/lib/python3.4/_collections_abc.py" in update
-
self[key] = value
File "/usr/local/lib/python3.4/collections/init.py" in setitem
-
if key not in self:
Exception Type: TypeError at /api/users/
Exception Value: unhashable type: 'OrderedDict'
`