【问题标题】:Custom password_reset_form returning: unhashable type: 'dict'自定义密码重置表单返回:不可散列类型:'dict'
【发布时间】:2014-01-03 14:29:08
【问题描述】:

我正在尝试覆盖 password_reset_form 的表单,但它一直导致以下错误:

不可散列的类型:'dict'

我将此错误解释为 password_reset_form 由于某种原因不存在?

我的 urls.py:

from rest_framework.routers import DefaultRouter
from django.conf.urls import patterns, url, include
from web import views
from web.forms import MyLoginForm, MyPasswordResetForm

urlpatterns = patterns('',
    #url(r'^', views.IndexView.as_view(), name='index'),
    url(r'^accounts/login/$', 'django.contrib.auth.views.login', {'authentication_form': MyLoginForm}),
    url(r'^accounts/logout/$', 'django.contrib.auth.views.logout', name='logout'),
    url(r'^accounts/password/reset/$', 
        'django.contrib.auth.views.password_reset', 
        {'password_reset_form': MyPasswordResetForm},
        {'post_reset_redirect' : '/user/password/reset/done/'}),
    (r'^accounts/password/reset/done/$',
        'django.contrib.auth.views.password_reset_done'),
    (r'^accounts/password/reset/(?P<uidb36>[0-9A-Za-z]+)-(?P<token>.+)/$', 
        'django.contrib.auth.views.password_reset_confirm', 
        {'post_reset_redirect' : '/user/password/done/'}),
    (r'^accounts/password/done/$', 
        'django.contrib.auth.views.password_reset_complete'),
)

我的forms.py:

from django import forms
from django.forms import ModelForm
from django.contrib.auth.models import User
from django.contrib.auth.forms import AuthenticationForm, PasswordResetForm

class MyLoginForm(AuthenticationForm):
    username = forms.CharField(widget=forms.TextInput(attrs={'class':'form-control','placeholder':'Brugernavn'}))
    password = forms.CharField(widget=forms.PasswordInput(attrs={'class':'form-control','placeholder':'Password'}))

class MyPasswordResetForm(PasswordResetForm):
    username = forms.CharField(widget=forms.TextInput(attrs={'class':'form-control','placeholder':'Brugernavn'}))

完整的堆栈跟踪:

Environment:


Request Method: GET
Request URL: http://127.0.0.1:8000/accounts/password/reset/

Django Version: 1.6.1
Python Version: 2.7.5
Installed Applications:
('django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'rest_framework',
 'web',
 'api',
 'django.contrib.admin',
 'rest_framework.authtoken',
 'corsheaders',
 'django.contrib.auth')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware',
 'corsheaders.middleware.CorsMiddleware')


Traceback:
File "/Library/Python/2.7/site-packages/django/core/handlers/base.py" in get_response
  114.                     response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/Library/Python/2.7/site-packages/django/utils/decorators.py" in _wrapped_view
  99.                     response = view_func(request, *args, **kwargs)
File "/Library/Python/2.7/site-packages/django/contrib/auth/views.py" in password_reset
  142.         post_reset_redirect = reverse('password_reset_done')
File "/Library/Python/2.7/site-packages/django/core/urlresolvers.py" in reverse
  509.     return iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs))
File "/Library/Python/2.7/site-packages/django/core/urlresolvers.py" in _reverse_with_prefix
  387.         possibilities = self.reverse_dict.getlist(lookup_view)
File "/Library/Python/2.7/site-packages/django/core/urlresolvers.py" in reverse_dict
  296.             self._populate()
File "/Library/Python/2.7/site-packages/django/core/urlresolvers.py" in _populate
  273.                     for name in pattern.reverse_dict:
File "/Library/Python/2.7/site-packages/django/core/urlresolvers.py" in reverse_dict
  296.             self._populate()
File "/Library/Python/2.7/site-packages/django/core/urlresolvers.py" in _populate
  287.                     lookups.appendlist(pattern.name, (bits, p_pattern, pattern.default_args))
File "/Library/Python/2.7/site-packages/django/utils/datastructures.py" in appendlist
  383.         self.setlistdefault(key).append(value)
File "/Library/Python/2.7/site-packages/django/utils/datastructures.py" in setlistdefault
  373.         if key not in self:

Exception Type: TypeError at /accounts/password/reset/
Exception Value: unhashable type: 'dict'

【问题讨论】:

  • 请提供完整的堆栈跟踪?
  • 您对url 的论证不正确。应该是一本字典{'password_reset_form': MyPasswordResetForm, 'post_reset_redirect' : '/user/password/reset/done/'}
  • @AlexanderLarikov,哎呀!那是绝对正确的。问题解决了!请给出我能接受的答案。

标签: django


【解决方案1】:

您对url 的论点不正确。应该是一本字典

url(r'^accounts/password/reset/$', 
    'django.contrib.auth.views.password_reset', 
    {'password_reset_form': MyPasswordResetForm,
     'post_reset_redirect': '/user/password/reset/done/'}),

【讨论】:

    猜你喜欢
    • 2021-12-22
    • 1970-01-01
    • 1970-01-01
    • 2012-10-27
    • 2015-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-12
    相关资源
    最近更新 更多