8 Mayıs 2016 Pazar

Django Admin Actions ile Eposta Gönderimi

:~$ cat admin.py
 
# -*- encoding: utf-8 -*-
from django.contrib import admin

# Sadece mesaj icin
from django.contrib import messages

# Eposta gonderimi icin
from django.core.mail import EmailMessage

# Epostanin sablonu icin
from django.template.loader import get_template

def email_gonder(modeladmin, request, queryset):
    # Secili olan elemani almak icin
    selected      = request.POST.getlist(admin.ACTION_CHECKBOX_NAME)
    # birden fazla eleman secili ise donguye sokmak icin
    for uye in selected :
        uye_    = userStat.objects.get(id=uye)
        variableX = XXXX.objects.get(bla bla bla)
        . . . . .
        htmly     = get_template('mail.html')
        d     = Context({ 'uye': uye_, 'variable in template': variableX, })
        subject, from_email, to = "Email Subject", "Name <do-not-reply@xxxxxxxx.com>", [uye_.email]
        html_content                 = htmly.render(d)
        msg             = EmailMessage(subject, html_content, from_email, to)
        msg.content_subtype = 'html'
        msg.send()
        # Admin panelde karsimiza uyari gelmesi icin. Burada msg.send() fonksiyonu istege gore koşula tabi tutulur.
        messages.info(request, "%s mail adresine mail basariyla gonderildi..." % uye_.email)




# Admin panelde eylemler/actions bolumunde bu sekilde belirir.
email_gonder.short_description = "Secili uyelere mail gonder"

class UserStatAdmin(admin.ModelAdmin):
    list_display = ['username', 'email']
    # Modelde varolan sinifin yapisina gore siralama degistirilebilir
    ordering = ['username']
    # Harici admin eylemleri burada belirtilir (bknz : fonksiyon adı)
    actions = [email_gonder]




Böylece admin panelde userStats bölümünde Eylemlerde "Secili uyelere mail gonder" seklinde belirir.

Hiç yorum yok:

Yorum Gönder