【问题标题】:Custom actions in Django AdminDjango Admin 中的自定义操作
【发布时间】:2009-04-06 22:01:17
【问题描述】:

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

我可以通过Model.save() 方法上的钩子来做到这一点,但还有其他方法不与模型绑定吗?

谢谢

【问题讨论】:

    标签: django django-admin


    【解决方案1】:

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

    【讨论】:

    【解决方案2】:

    如果您是从管理员那里执行此操作,则需要覆盖 save() 方法,但它可以是 AdminModel 保存...不需要是完整的模型保存。

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

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

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

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

    【讨论】:

    【解决方案3】:

    你可以试试这个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()
    

    【讨论】:

      猜你喜欢
      • 2020-09-14
      • 2020-07-30
      • 2019-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-17
      • 2014-09-08
      相关资源
      最近更新 更多