2011-03-06 2 views
3

나는 평범하지 않은 문제가 있습니다. 내 장고 응용 프로그램에서 전자 메일을 보내는 데 신호를 사용합니다. 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) 

오전 : 내가 신호를 보낼 경우

여기에 코드입니까?

또한 하루 이내에 날짜를 확인할 수있는 더 쉬운 방법이 있습니까?

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

바로 가기가 주셔서 감사합니다? 귀하의 코드는 나에게 잘 어울립니다.

1

제가 생각할 수있는 유일한 것은 신호 처리기가 django-admin 기능이 실행될 때 등록되지 않았기 때문입니다. 리스너를 앞에두고 print 문을 사용하고 관리 명령을 실행하여이를 확인할 수 있습니다.

신호 수신기를 app/__init__.py 파일에 넣어보십시오. app 패키지에 액세스 중이므로 __init__.py에있는 모든 항목이 실행되어 리스너를 등록해야합니다.

+0

나는 핸들러 함수에 신호를 연결하고 어디에 신호를 등록하는지 print 문을 써주려했다. 어디서나 작동하므로 신호를 등록하는 데 문제가 없습니다 ... – stuudent

관련 문제