2017-08-23 9 views
0

管理者がユーザアカウントを作成した後、メールを送信しようとしています。djangoからユーザのメールにアカウントの詳細を送信します。

アカウント/ admin.py

class ProfileInline(admin.StackedInline): 
    model = Profile 
    can_delete = False 
    verbose_name_plural = 'Profile' 
    fk_name = 'user' 

class CustomUserAdmin(UserAdmin): 
    inlines = (ProfileInline,) 
    list_select_related = ('profile',) 
    list_display = ('email', 'username', 'first_name', 'last_name', 'is_staff') 

    fieldsets = (
     ('Personal information', {'fields': ('first_name', 'last_name', 'username', 'email', 'password')}), 
     ('Permissions', {'fields': ('is_active', 'is_staff', 'is_superuser', 'groups', 'user_permissions')}), 
     ('Important dates', {'fields': ('last_login', 'date_joined')}), 
    ) 

    add_fieldsets = (
     ('None', { 
      'classes': ('wide',), 
      'fields': ('username', 'email', 'password1', 'password2')} 
     ), 
    ) 

    def get_inline_instances(self, request, obj=None): 
     if not obj: 
      return list() 
     return super(CustomUserAdmin, self).get_inline_instances(request, obj) 

    def get_ordering(self, request): 
     return ['-date_joined'] 

    def save_model(self, request, obj, form, change): 
     super(CustomUserAdmin, self).save_model(request, obj, form, change) 
     obj.user = request.user 
     obj.profile.email_confirmed = True 
     obj.profile.save() 
     print(obj) 
     if not change: 
      current_site = get_current_site(request) 
      subject = 'Your Account Login Details' 
      message = render_to_string('accounts/email/account_detail_email.html', { 
       'user': obj.user, 
       'domain': current_site.domain, 
      }) 
      obj.user.email_user(subject, message) 

メールヘッダ

MIME-Version: 1.0 
Content-Type: text/plain; charset="utf-8" 
Content-Transfer-Encoding: 7bit 
Subject: Your Account Login Details 
From: ****@gmail.com 
To: [email protected] 
Date: Wed, 23 Aug 2017 11:21:41 -0000 
Message-ID: <[email protected]> 

電子メールが管理者の電子メールである必要がありません管理者にユーザーの電子メールにアクセスし、電子メールから必要があります。

私はobjを印刷すると、作成されたユーザーのユーザー名が表示されます。

ご迷惑をおかけして申し訳ございません。前もって感謝します。

答えて

0

その後、あなたはDjangoのカスタム管理アクションを使用することができます:)

0

提案してください他のより良い方法があればそれは

obj.email_user(subject, message) 

ない

obj.user.email_user(subject, message) 

する必要があります:https://docs.djangoproject.com/en/1.11/ref/contrib/admin/actions/

は、

あなたの管理者クラスは次のようになります:

def send_account_details(modeladmin, request, queryset): 
    # Your email sending code here. 
    # The queryset contains selected users 
    ... 


class CustomUserAdmin(UserAdmin): 
    ... 
    actions = [send_account_details] 
+0

もう一度素晴らしいアイデアをくれてくれてありがとう。この時点で 'adminアクション 'を持つ必要はありませんが、必要に応じて将来使用できます。 –

関連する問題