django管理员行动

时间:2012-03-02 15:13:14

标签: django django-admin

您好我想从用户管理员中发送密码重置电子邮件并设置操作。

我无法确定是否可以使用password_reset视图。我可以使用视图循环查询集以生成令牌并发送电子邮件吗?

1 个答案:

答案 0 :(得分:5)

  1. 子类UserAdmin ,您可以从django.contrib.auth.admin

  2. 导入它
  3. 添加您添加的操作,PasswordResetForm使用reverse engineering the password_reset view

  4. 从admin.site取消注册用户admin.site.register(User)

  5. 注册您的子类作为用户的modeladmin

  6. 这是一个例子(感谢Chris Pratt推动使用取消注册/注册):

    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)