我成功使用django的自定义用户模型。 最后一件工作是“AdminChangePasswordForm”,供超级用户更改任何用户密码。
目前来自admin:myapp:user的更改密码链接提供了404
答案。
覆盖get_urls
并覆盖UserChangeForm以获取正确的网址。
答案 0 :(得分:2)
它似乎是一个" bug"在1.7.x中,并在1.8.x中设置,其中设置了网址名称,因此您必须覆盖get_urls()
:
from django.contrib.auth.admin import UserAdmin as AuthUserAdmin
from django.conf.urls import url
class UserAdmin(AuthUserAdmin):
def get_urls(self):
return [
url(r'^(.+)/password/$', self.admin_site.admin_view(self.user_change_password), name='auth_user_password_change'),
] + super(UserAdmin, self).get_urls()
URL:
password_change_url = urlresolvers.reverse('admin:auth_user_password_change', args=(1,))
答案 1 :(得分:0)
所以我有类似的问题。当我尝试从管理员更改用户密码时,我将URL设置为“/ admin / accounts / siteuser / password /”(siteuser是我的自定义用户模型的名称),并且此消息出现404错误:“带有主键的用户对象u”密码'不存在。“ 调查显示问题是由于django-authtools(1.4.0)中的错误导致我使用NamedUserAdmin类继承。
所以解决方案是(如果您需要从django-authtools继承任何自定义UserAdmin,如NamedUserAdmin):
from django.contrib.auth.forms import UserChangeForm
from authtools.admin import NamedUserAdmin
class SiteUserAdmin(NamedUserAdmin):
...
form = UserChangeForm
...
或者只是从默认的django UserAdmin继承:
from django.contrib.auth.admin import UserAdmin
class SiteUserAdmin(UserAdmin):
pass