2011-11-13 33 views
6

Tôi đang sử dụng một quản trị viên tài khoản tùy chỉnh bằng cách:Sử dụng quản trị vi phạm tùy chỉnh người dùng thay đổi hình thức mật khẩu trong quản trị của Django

class CustomUserAdmin(admin.ModelAdmin): 
    model = User 
    ... 
admin.site.unregister(User) 
admin.site.register(User, CustomUserAdmin) 

nhưng khi tôi cố gắng để thay đổi mật khẩu thông qua trang quản trị tôi nhận được một 404.

user object with primary key u'4/password' does not exist. 

Hoàn nguyên về quản trị viên người dùng mặc định hoạt động tốt.

Trả lời

16

Mặc định UserAdmin trong django.contrib.auth.admin triển khai nhiều chức năng, bao gồm cả trang mật khẩu thay đổi.

CustomUserAdmin của bạn nên phân loại UserAdmin thay vì admin.ModelAdmin, trừ khi bạn muốn tự mình thực hiện lại chức năng đó.

class CustomUserAdmin(UserAdmin): 
    # as an example, this custom user admin orders users by email address 
    ordering = ('email',) 

admin.site.unregister(User) 
admin.site.register(User, CustomUserAdmin) 
+0

Điều này làm việc cho tôi nhưng có mã này: exclude = ('is_superuser', 'user_permissions') vi phạm. – wenbert

+1

@wenbert bạn cần ghi đè 'fieldets'. Cả hai is_superuser và user_permissions được bao gồm trong 'UserAdmin.fieldsets'. Bạn không thể bao gồm một trường trong các trường, sau đó loại trừ nó. – Alasdair

1

Ngoài ra:

Theo the docs, nếu bạn thừa hưởng từ AbstractBaseUser bạn không thể sử dụng UserAdmin mặc định; hoặc, đặt một cách khác, bạn có thể nhưng chỉ một tập con của chức năng sẽ hoạt động - việc thay đổi mật khẩu hiện có có thể hoạt động, nhưng việc thêm người dùng mới sẽ ném ngoại lệ.

Các vấn đề liên quan