【发布时间】:2021-09-24 07:21:21
【问题描述】:
当管理员发布从 Django 管理员创建的博文时,我正在使用 Django 信号触发任务(使用 django celery 包向订阅者发送大量电子邮件)。但是没有触发信号。我在未打印的信号中有一个打印语句,即在创建新博客后未接收到信号。
我的应用是这样设置的。
我的博客模型:
class BlogPost(models.Model):
author = models.CharField(max_length=64, default='Admin')
image = models.ImageField(blank=True, null=True)
title = models.CharField(max_length=255)
.................../
我的任务文件
from django.core.mail import send_mail
from travel_crm.settings import EMAIL_HOST_USER
@shared_task
def send_mails(self,*args, **kwargs):
subscribers = self.kwargs['subscribers']
blog = self.kwargs['blog']
for abc in subscribers:
emailad = abc.email
send_mail('New Blog Post ', f" Checkout our new blog with title {blog.title} ",
EMAIL_HOST_USER, [emailad],
fail_silently=False)
我的信号.py 文件
from .tasks import send_mails
from apps.blogs.models import BlogPost,Subscribers
from django.db.models.signals import post_save
from django.dispatch import receiver
@receiver(post_save, sender=BlogPost)
def email_task(sender, instance, created, **kwargs):
print(123456789)
if created:
print(123456789)
subscribers = Subscribers.objects.all()
blog = BlogPost.objects.latest('date_created')
print(blog)
# task = send_mails(subscribers, blog)
# task.delay()
send_mails.delay(subscribers,blog)
我的初始化文件
from __future__ import absolute_import, unicode_literals
from apps.blogs.celery_files.celery import app as celery_app
__all__ = ('celery_app',)
【问题讨论】:
-
您的代码示例不起作用。您提供的方法没有类 (
def send_mail) 和模型中的 sn-ps,它们甚至缺少您在其他 sn-ps (date_created) 中使用的字段。你确定这个问题是特定于邮件的 - 换句话说,你能确认 celery 正常工作吗? -
我在 Blogpost 中使用了.....因为有很多字段我不需要在这里写所以...
标签: django django-rest-framework django-celery django-signals