3

我有一个不寻常的问题。在我的 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)

难道我做错了什么?

另外,有没有更简单的方法可以在一天内查看日期?

谢谢你的任何建议

4

2 回答 2

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)

您可以在这里发布您的项目结构吗?你的代码对我来说看起来不错。

于 2011-03-06T06:27:34.873 回答
1

我唯一能想到的是,信号处理程序在 django-admin 函数执行时尚未注册。您可以通过在侦听器前面加上一条print语句并运行您的管理命令来检查这一点。

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

于 2011-03-06T08:09:26.777 回答