2011-03-06 106 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