2012-03-02 138 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