2015-10-15 38 views
5

Tôi đang sử dụng thành công mô hình người dùng tùy chỉnh với django. Điều cuối cùng để làm việc là "AdminChangePasswordForm" dành cho những siêu người dùng để thay đổi bất kỳ mật khẩu người dùng nào.Quản trị viên người dùng tùy chỉnh Django change_password

hiện liên kết mật khẩu thay đổi từ quản trị viên: myapp: người dùng cung cấp 404

Câu trả lời.

Ghi đè get_urls

và ghi đè UserChangeForm để có url chính xác.

+0

thể bạn đăng mô hình người dùng của bạn? –

+0

vâng, không phải tất cả nhưng bạn có thể thấy ý tưởng chung – straykiwi

Trả lời

2

Có vẻ như đó là một "lỗi" trong 1.7.x, và cố định trong 1.8.x, mà thiết lập tên url, vì vậy bạn phải ghi đè 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,)) 
+0

Ok Tôi đang sử dụng 1.8. Sẽ thử ASAP và cho bạn biết – straykiwi

+0

URL sẽ đi đâu? Tôi đã thêm nó vào UserAdmin tùy chỉnh nhưng nó không thể đảo ngược URL. thậm chí thay đổi "auth" thành "users" (tên ứng dụng của tôi) cũng giống nhau. Ngoài ra, với arg tĩnh của 1 là gì? – straykiwi

+0

Nếu bạn đang sử dụng 1.8 hoặc không cần phải lấy password_change_url theo id người dùng, câu trả lời không hữu ích cho bạn. "1" chỉ là một ví dụ. Bạn có thể đăng 'UserAdmin' của mình không? Liên kết thay đổi mật khẩu: https://github.com/django/django/blob/stable/1.8.x/django/contrib/auth/forms.py#L103, UserChangeForm cho UserAdmin: https://github.com/django /django/blob/stable/1.8.x/django/contrib/auth/admin.py#L57 – JimmyYe

0

Vì vậy, Tôi đã có vấn đề tương tự. Khi tôi cố gắng thay đổi mật khẩu người dùng từ quản trị viên, tôi đã nhận url là "/ admin/accounts/siteuser/password /" (siteuser là tên của mô hình người dùng tùy chỉnh của tôi) và lỗi 404 với thông báo này: "đối tượng người dùng với khóa chính u ' mật khẩu 'không tồn tại. " Cuộc điều tra cho thấy rằng vấn đề là do lỗi trong django-authtools (1.4.0) khi tôi sử dụng lớp NamedUserAdmin để kế thừa từ.

Vì vậy giải pháp là một trong hai (nếu bạn cần phải kế thừa từ bất kỳ UserAdmin tùy chỉnh giống như NamedUserAdmin từ django, authtools):

from django.contrib.auth.forms import UserChangeForm 
from authtools.admin import NamedUserAdmin 
class SiteUserAdmin(NamedUserAdmin): 
    ... 
    form = UserChangeForm 
    ... 

hoặc kế thừa từ django mặc định UserAdmin:

from django.contrib.auth.admin import UserAdmin 
class SiteUserAdmin(UserAdmin): 
    pass 
Các vấn đề liên quan