действие администратора django - PullRequest
3 голосов
/ 02 марта 2012

Здравствуйте! Я хотел бы отправить электронные письма для сброса пароля изнутри администратора пользователя и настроить действие.

Я не могу определить, возможно ли использовать представление password_reset.Можно ли зациклить набор запросов, используя представление для создания токена и отправки электронного письма?

1 Ответ

5 голосов
/ 02 марта 2012
  1. Подкласс UserAdmin , вы можете импортировать его из django.contrib.auth.admin

  2. Добавить добавленное действие, использовать PasswordResetForm с помощью обратное проектирование представления password_reset .

  3. Отмена регистрации пользователя на admin.site , admin.site.register(User)

  4. Зарегистрируйте свой подкласс в качестве modeladmin для пользователя

Вот пример (спасибо Крису Пратту за использование незарегистрированной регистрации)/ зарегистрироваться):

from django.contrib.auth.forms import PasswordResetForm
from django.contrib.auth.tokens import default_token_generator
from django.conf import settings
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.models import User

class YourUserAdmin(UserAdmin):
    actions = list(UserAdmin.actions) + ['send_reset_password']

    def send_reset_password(modeladmin, request, queryset):
        for user in queryset:
            form = PasswordResetForm({'email': user.email})
            form.full_clean()
            form.save({
                'use_https': request.is_secure(),
                'token_generator': default_token_generator,
                'from_email': settings.DEFAULT_FROM_EMAIL,
                'email_template_name': 'registration/password_reset_email.html',
                'request': request
            })

admin.site.unregister(User)
admin.site.register(User, YourUserAdmin)
...