Django Admin中的自定义操作

时间:2009-04-06 22:01:17

标签: django django-admin

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

我可以使用Model.save()方法上的钩子来做到这一点,但还有另一种与模型无关的方法吗?

由于

3 个答案:

答案 0 :(得分:16)

Admin actions可让您轻松连接可在管理员列表页面上对所选项目执行的自定义操作。

答案 1 :(得分:1)

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

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

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

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

如果你真的想要从管理网站上获取它,请安装django-chronograph并从那里设置你的send_mail时间表。

答案 2 :(得分: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()