2011-03-06 109 views
3

我有一个不确定的问题。 在我的django应用程序中,我使用信号发送电子邮件。 除django-admin命令--django.core.management.base.NoArgsCommand(通过manage.py运行)之外的所有信号都可以工作。从django-admin命令发送django信号?

我检查了我的信号在不同的地方,它的工作原理除了这个地方。

下面的代码,我发送了信号:

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

的快捷方式是:

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

我唯一能想到的就是信号处理程序在django-admin函数执行时尚未注册。您可以通过在监听器前面输入print声明并运行管理命令来进行检查。

尝试将信号侦听器放入app/__init__.py文件中。由于您正在访问app软件包,因此应执行__init__.py中的所有操作,注册监听器。

+0

我曾尝试将打印语句放在注册信号的位置,并将信号连接到处理函数。它在任何地方工作,所以它不是注册信号的问题...... – stuudent 2011-03-06 19:50:24