2015-10-15 4 views
5

Я успешно использую пользовательскую модель с django. Последнее, что нужно для работы, это «AdminChangePasswordForm» для суперпользователей, чтобы изменить любой пароль пользователя.Django custom user admin change_password

в настоящее время ссылку на изменение пароля от администратора: MyApp: пользователь дает 404

Ответ.

Override get_urls

и переопределение UserChangeForm иметь правильный URL.

+0

может вам опубликовать свою модель пользователя? –

+0

да, не все, но вы можете видеть общую идею. – straykiwi

ответ

2

Кажется, что это "ошибка" в 1.7.x, и фиксируется в 1.8.x, которые устанавливают имя URL-адрес, так что вы должны переопределить 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

Хорошо, я использую 1.8. Попробуй как можно скорее и сообщите об этом – straykiwi

+0

Где находится URL? Я добавил его в пользовательский UserAdmin, но он не может отменить URL. даже изменение «auth» на «users» (мое имя приложения) дает то же самое. Кроме того, что такое статический arg 1? – straykiwi

+0

Если вы используете 1.8 или вам не нужно вводить пароль_change_url по идентификатору пользователя, ответ вам не подходит. «1» - всего лишь пример. Можете ли вы разместить свой «UserAdmin»? Ссылка на изменение пароля: https://github.com/django/django/blob/stable/1.8.x/django/contrib/auth/forms.py#L103, UserChangeForm для UserAdmin: https://github.com/django /django/blob/stable/1.8.x/django/contrib/auth/admin.py#L57 – JimmyYe

0

Так У меня была схожая проблема. Когда я попытался сменить пароль пользователя из admin, я получил url для «/ admin/accounts/siteuser/password /» (siteuser - это имя моей пользовательской модели) и 404 ошибка с этим сообщением: «Пользовательский объект с первичным ключом u» пароль "не существует." Исследование показало, что проблема связана с ошибкой в ​​django-authtools (1.4.0), поскольку я использовал класс NamedUserAdmin для наследования.

Таким образом, решение либо (если вам нужно наследовать от любого пользовательского UserAdmin как NamedUserAdmin от Джанго-authtools):

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

или просто унаследовать от Джанго по умолчанию UserAdmin:

from django.contrib.auth.admin import UserAdmin 
class SiteUserAdmin(UserAdmin): 
    pass