django-clever-selects TypeError 方法 is_valid()

django-clever-selects TypeError with method is_valid()

使用 django-clever-selects 链接选择,但视图中的 is_valid() 方法导致此错误:

Traceback:
File "/Applications/djangostack-1.7.10-0/apps/django/django_projects/freshTest/myenv/lib/python3.4/site-packages/django/core/handlers/base.py" in get_response
  132.                     response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/Applications/djangostack-1.7.10-0/apps/django/django_projects/freshTest/megaForm/views.py" in newForm
  29.         if form.is_valid():
File "/Applications/djangostack-1.7.10-0/apps/django/django_projects/freshTest/clever_selects/forms.py" in is_valid
  191.             activate(self.language_code)
File "/Applications/djangostack-1.7.10-0/apps/django/django_projects/freshTest/myenv/lib/python3.4/site-packages/django/utils/translation/__init__.py" in activate
  146.     return _trans.activate(language)
File "/Applications/djangostack-1.7.10-0/apps/django/django_projects/freshTest/myenv/lib/python3.4/site-packages/django/utils/translation/trans_real.py" in activate
  217.     if language in _DJANGO_DEPRECATED_LOCALES:

Exception Type: TypeError at /newForm/
Exception Value: unhashable type: 'QueryDict'

views.py

def newForm(request):
if request.method == 'POST':
    form = SimpleChainForm(request.POST)
    if form.is_valid():
        print(form.cleaned_data)
        return render(request, 'form1/current_form.html', {
            'form': form,
            'message': (request.POST['cat'],request.POST['columns']),
            # 'error_message': "You didn't select a choice.",
        })
#if GET or other method create blank form
else:
    form=SimpleChainForm()
return render(request, 'form1/current_form.html', {'form': form})

文档说django-clever-selects已经是'Tested on Django 1.4.5.',但是我需要用1.8。这个错误有 work-round/fix 吗? django 的新手所以任何帮助将不胜感激!

对于遇到此问题的其他人,以下对我有用:

https://github.com/filipefigcorreia/django-clever-selects/commit/4f6da07bb9e880aaaa188297f5866bcbf9c6cab6

https://github.com/PragmaticMates/django-clever-selects/issues/6

首先在 clever_selects/forms.py 中删除这些行

def __init__(self, language_code=None, *args, **kwargs):
self.language_code = language_code

加入

def __init__(self, *args, **kwargs):
self.language_code = kwargs.get('language_code', None)

在我的应用中,forms.py,删除 reverse_lazy

ajax_url=reverse_lazy('ajax_chained_subtypes') ==> ajax_url='/ajax/chained-subtypes/',

生成字节字符串问题,解决方法: clever_selects/forms.py 第 97 行

field.choices = field.choices + json.loads(data.content) ==>
field.choices = field.choices + json.loads(data.content.decode("utf-8"))