2012-03-02 218 views
3

嗨我想从用户管理员发送密码重置电子邮件,并设置了一个操作。django管理员操作

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

回答

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

  2. 导入它加入你添加的动作,通过reverse engineering the password_reset view使用PasswordResetForm

  3. 从admin.site注销用户,admin.site.register(User)

  4. 注册您的子类作为的ModelAdmin用户

下面是推动使用注销的例子(感谢克里斯·普拉特/ register):

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) 
+1

还有n o需要猴子补丁'UserAdmin'。只需将其子类化并根据需要覆盖任何属性或方法。然后,你只需要'admin.site.unregister(UserAdmin)'和'admin.site.register(User,MyUserAdmin)'。 – 2012-03-02 15:35:35

+0

我不确定有什么区别,可能它没有猴子补丁稍微干净。谢谢 ! – jpic 2012-03-02 15:38:14

+0

我会做注销的东西... @jpic这使我与: 'PasswordResetForm'对象没有属性'users_cache' – Timbadu 2012-03-02 15:38:19