【发布时间】:2009-04-06 22:01:17
【问题描述】:
在我的 Django 应用程序中,我有一个 Newsletter 模型。现在我希望能够从 Django Admin 发送新闻通讯(甚至重新发送它)。
我可以通过Model.save() 方法上的钩子来做到这一点,但还有其他方法不与模型绑定吗?
谢谢
【问题讨论】:
标签: django django-admin
在我的 Django 应用程序中,我有一个 Newsletter 模型。现在我希望能够从 Django Admin 发送新闻通讯(甚至重新发送它)。
我可以通过Model.save() 方法上的钩子来做到这一点,但还有其他方法不与模型绑定吗?
谢谢
【问题讨论】:
标签: django django-admin
Admin actions 允许您轻松连接自定义操作,这些操作可以对管理员列表页面中的选定项目执行。
【讨论】:
如果您是从管理员那里执行此操作,则需要覆盖 save() 方法,但它可以是 AdminModel 保存...不需要是完整的模型保存。
但是,如果您要发送 很多 封电子邮件,更好的方法是安装 django-mailer,它将电子邮件放入队列以供以后处理,然后为您提供新的管理命令:发送邮件。
因此,一旦您准备好发送简报,您就可以手动运行python manage.py send_mail。任何有错误的电子邮件都将被移至延迟队列,您可以稍后重试发送。
您可以通过在 cron 中运行 manage.py send_mail 来自动执行此操作。
如果您真的想从管理站点获得幻想,请安装 django-chronograph 并从那里设置您的 send_mail 时间表。
【讨论】:
你可以试试这个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()
【讨论】: