17

在我的 Django 应用程序中,我有一个 Newsletter 模型。现在我希望能够从 Django Admin发送时事通讯(甚至重新发送)。

我可以在方法上加上一个钩子来做到这一点,Model.save()但是还有另一种不与模型相关的方法吗?

谢谢

4

3 回答 3

17

管理员操作允许您轻松连接自定义操作,这些操作可以对管理员列表页面中的选定项目执行。

于 2009-04-06T22:30:14.453 回答
1

如果你是从管理员那里做的,那么你需要覆盖 save() 方法,但它可以是 AdminModel 保存...不需要是完整的模型保存。

但是,如果您要发送大量电子邮件,更好的方法是安装django-mailer,它将电子邮件放入队列中以供以后处理,然后为您提供新的管理命令:send_mail。

因此,一旦您准备好发送时事通讯,您就可以手动运行python manage.py send_mail. 任何有错误的电子邮件都将被移至延迟队列,您可以稍后重试发送它们。

您可以通过manage.py send_mail从 cron 运行来自动执行此操作。

如果您真的想从管理站点获得幻想并执行此操作,请安装django-chronograph并从那里设置您的 send_mail 时间表。

于 2009-04-06T22:30:29.650 回答
1

你可以试试这个https://www.youtube.com/watch?v=WvL1cR2MgLI

只是改变

 def available (modeladmin,request,queryset):
    queryset.update(status='ava')

def not_available (modeladmin,request,queryset):
    queryset.update(status='not')

类似于

def send(modeladmin, request, queryset):

    for data in queryset:

        subject=data.title
        message=data.mesage
       

        for d in Users.objects.filter(newsletter=True):
            email=d.email
            


            sendemail = EmailMessage(subject, message+unsubscribe,    'emailo@mdjangotutsme.com',
                [email], [],
                headers = {'Reply-To': 'emailo@mdjangotutsme.com'})

            sendemail.content_subtype = "html" 
            
            sendemail.send()
于 2014-12-30T15:19:05.817 回答