我有以下子类:
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。我怎么能这样做?
答案 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)