Django发送一封电子邮件,以便更改多个相关的模型实例

时间:2015-08-18 18:18:44

标签: python django

我有一个django项目,其中我有一个带有自定义用户外键的模型,例如:

class BlogEntry(models.Model):
    author = models.ForeignKey(CustomUser)
    body = models.TextField()
    is_published = models.BooleanField(default=False)

可以在管理员中内联查看和编辑特定作者的博客条目。管理员用户可以通过更改“is_published”字段来决定发布博客条目。

我想通过电子邮件发布他们的博客条目时通知用户。通过覆盖BlogEntry上的save方法,这很容易。但是,可能会同时发布多个博客条目,我只想通知他们一次,其中包含所有博客条目的列表,这些博客条目已从is_published = False更改为is_published = True保存作者模型。

最好的方法是什么?

1 个答案:

答案 0 :(得分:0)

有几种方法。

如果您的UI中有批量发布方式,只需在批量发布上调用一个函数,该函数需要发布博客文章列表,然后发布这些博客文章并发送一封电子邮件。

如果您真正需要的是某个时间段内博客发布的摘要,您将需要设置一个定期任务队列,如Celery并创建一个发送单个电子邮件的任务在一段时间内发布的所有博客文章。您需要在模型上添加发布时间。例如,如果您想要每日发布事件摘要,您可以创建一个每日任务,该任务可以获取用户分组的过去一天发布的所有博客帖子,然后如果他们发布了博客帖子,则会向每个用户发送一封电子邮件一天。

使用Celery实现此目的的另一种方法是在第一篇博文上创建发送电子邮件任务,保存以x分钟为单位发送。在x分钟内进行的未来保存可以看到队列中有一个事件,并且不会创建另一个事件。当x分钟结束时,Celery将运行发送电子邮件任务,该任务将抓取过去x分钟内的所有任务并发送电子邮件。

希望其中一个符合您的要求!