【问题标题】:Admin side modification django管理员端修改django
【发布时间】:2020-01-08 18:44:05
【问题描述】:

我有这个类,当我提交名称时,它会转到管理员,只有管理员可以批准。我希望当管理员自动批准电子邮件时,应该将电子邮件发送给用户。

  class myab(models.Model):
        generic_name = models.CharField(max_length=50, null=False)
        timestamp = models.DateTimeField(auto_now_add=True)
        is_approved = models.BooleanField(null=False, default=False)

我只想知道如何触发电子邮件代码。我有其他一切,只是想了解当管理员批准这篇文章时如何触发该功能。

【问题讨论】:

    标签: python django django-models django-admin django-2.0


    【解决方案1】:

    您可以为post-save signal 创建一个监听函数并使用if 来检查实例是否被批准;阅读signal docs 以获得更好的理解。

    信号接收器可能如下所示:

    from django.core import mail
    from django.db.models.signals import post_save
    from django.dispatch import receiver
    from myapp.models import MyModel
    
    
    @receiver(post_save, sender=MyModel)
    def my_handler(sender, instance, created, *args, **kwargs):
        ...
    
        if instance.is_approved:
            mail.send_mail(...)
    

    突出显示this section of the docs

    这段代码应该放在哪里?

    [...] 信号处理 [...] 代码可以存活 任何你喜欢的地方,虽然建议避免 应用程序的根模块及其模型模块 [...]

    在实践中,信号处理程序通常定义在信号中 它们相关的应用程序的子模块 [...]

    【讨论】:

    • @gamer 我扩展了我的答案;信号应该在它自己的文件(或子模块)中,称为signals.py
    • 感谢您的回复。我们可以在删除实例时也使用类似的函数吗?
    • @gamer 是的,在这种情况下,您会收听 pre_delete signal(或 post_delete)
    • 非常感谢兄弟
    • 嗨,我没有收到信号 :( 我在调试器中看到它没有进入粘贴此代码的 signals.py 文件
    猜你喜欢
    • 2015-01-23
    • 1970-01-01
    • 2016-01-03
    • 1970-01-01
    • 2021-10-18
    • 2019-04-25
    • 2020-03-15
    • 2010-10-12
    • 2013-10-31
    相关资源
    最近更新 更多