我有一个不正常的问题。 在我的django应用程序中,我使用信号发送电子邮件。 除了从django-admin命令激发的信号之外,所有信号都有效 - django.core.management.base.NoArgsCommand(通过manage.py运行)。
我在不同的地方检查了我的信号,除了这个地方外,它的工作原理。
这是我发送信号的代码:
from django.core.management.base import NoArgsCommand
class Command(NoArgsCommand):
help = "Send email advertisement expiration reminder to users"
def handle_noargs(self, **options):
from app.models import Advertisement, User
from app.signals import ad_expires
from datetime import datetime
start=datetime(datetime.now().year, datetime.now().month, datetime.now().day+4,0,0)
end=datetime(datetime.now().year,datetime.now().month,datetime.now().day+4,23,59)
ads=Advertisement.objects.filter(visible_till__gte=start).filter(visible_till__lte=end)
for ad in ads:
ad_expires.send(self,ad=ad, user=ad.user)
print "Expiration reminders sent to %s users" % len(ads)
我做错了吗?
此外,有没有更简单的方法在一天内检查日期?
感谢您的任何建议
答案 0 :(得分:2)
快捷方式是:
start = datetime.now() + timedelta(days=4)
end = start + timedelta(days=1)
ads=Advertisement.objects.filter(visible_till__gte=start).filter(visible_till__lt=end)
您可以在这里发布您的项目结构吗?你的代码对我来说很好。
答案 1 :(得分:1)
我唯一能想到的是,django-admin函数执行时尚未注册信号处理程序。您可以通过在监听器前面加上print
语句并运行管理命令来检查这一点。
尝试将信号侦听器放入app/__init__.py
文件中。由于您正在访问app
包,__init__.py
中的所有内容都应该执行,并注册该侦听器。