【问题标题】:sending django signals from django-admin command?从 django-admin 命令发送 django 信号?
【发布时间】:2011-03-06 03:56:32
【问题描述】:

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

我做错了吗?

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

感谢您的建议

【问题讨论】:

    标签: python django django-signals django-manage.py


    【解决方案1】:

    快捷方式是:

    start = datetime.now() + timedelta(days=4)
    end = start + timedelta(days=1)
    ads=Advertisement.objects.filter(visible_till__gte=start).filter(visible_till__lt=end)
    

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 我尝试将打印语句放在注册信号的位置以及将信号连接到处理函数的位置。它无处不在,所以注册信号不是问题......
      猜你喜欢
      • 1970-01-01
      • 2018-05-14
      • 2016-05-04
      • 2015-12-10
      • 1970-01-01
      • 2020-08-17
      • 2014-12-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多