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/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"))
使用 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/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"))