从auth用户重新使用更改密码

时间:2012-03-23 11:25:34

标签: python django django-admin

我有以下子类:

class UserProfile(User):
    user = models.OneToOneField(User, parent_link=True)

UserProfileAdmin:

class UserProfileAdmin(admin.ModelAdmin):
    # stuff
admin.site.register(UserProfile, UserProfileAdmin)

此管理员在密码字段下显示更改密码链接/admin/customer/userprofile/1548/password/。但我得到以下错误:

invalid literal for int() with base 10: '1548/password'

我想使用与auth.User中相同的更改密码表单,并且在进行更改后,我希望将其重定向到UserProfileAdmin。我怎么能这样做?

1 个答案:

答案 0 :(得分:3)

这是预期的行为,因为:

/admin/customer/userprofile/1548/password/

想要显示id为'1548 / password'的userprofile的更改表单。

扩展User类不是每个用户存储额外数据的方法。阅读Storing additional information about users上的文档,了解如何以正确的方式进行操作。

也就是说,如果您希望此网址打开管理员更改密码页面,您可以执行重定向:

# put **before** include(admin.site.urls)
url(r'/admin/customer/userprofile/(?P<id>\d+)/password/$', 'views.redirect_to_password'),

在views.py中:

from django import shortcuts

def redirect_to_password(request, id):
    return shortcuts.redirect('/admin/auth/user/%s/password/' % id)

如果您还想将/ admin / auth / user / 1234重定向到/ admin / customer / userprofile / 1234,那么您可以添加:

url(r'/admin/auth/user/(?P<id>\d+)/$', 'views.redirect_to_customer_changeform'),

可以使用类似的观点:

from django import shortcuts

def redirect_to_customer_changeform(request, id):
    return shortcuts.redirect('/admin/customer/userprofile/%s/' % id)