从django-admin命令发送django信号?
我遇到了一个不寻常的问题。在我的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)
我是不是做错了什么?
另外,有没有更简单的方法来检查一天内的日期?
2 个回答
1
我能想到的唯一原因是,当执行django-admin函数时,信号处理器还没有被注册。你可以在监听器前面加一个print
语句,然后运行你的管理命令来检查这一点。
试着把信号监听器放到app/__init__.py
文件里。因为你正在访问app
这个包,所以__init__.py
里的所有内容都会执行,这样就能注册监听器了。
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)
你能把你的项目结构发过来吗?我觉得你的代码看起来不错。