2013-06-23 2 views
1

Я прочитал django docs о signals и написал этот кусок кода для моей модели Car:Cant получить post_save работать в Django

@receiver(request_finished) 
def signal_callback(sender, **kwargs): 
    print 'Save Signal received' 


@receiver(post_save, sender=Car) 
def signal_handler(sender, **kwargs): 
    pass 


request_finished(signal_callback, sender=car, dispatch_url="Unique save id") 

Но проблема в том, что, когда я запущу мой сервер, и просто открыть до администратора, я получаю много 'Save Signal received' в моем терминале. Мне интересно, я ограничил только signal_handler до post_save. Но все же, даже не сохраняя ничего, сообщение появляется много раз. Я не понимаю этого.

Примечание: Я буду честен. Я понял его части, не все из документации.

ответ

5

Существует более простой способ связать post_save signals

from django.db.models.signals import post_save 
from myapp.models import Car 

def do_something(sender, **kwargs): 
    print 'the object is now saved.' 
    car = kwargs['instance'] #now i have access to the object 

post_save.connect(do_something, sender=Car) 

Сигнал request finished вызывается каждый время запроса HTTP сделан, который является свиньей.

1

Вы связали request_finished сигнал до signal_callback. Удалить (или закомментировать) signal_callback и сменить signal_handler следующим образом.

@receiver(post_save, sender=Car) 
def signal_handler(sender, **kwargs): 
    print 'Save signal received' 
+0

, а затем я должен связать 'request_finished' с' signal_handler'? –

+0

то как насчет метода, который должен был отправить сигнал? –

+0

'signal_handler' вызывается, когда вызывается' Car.objects.create (...) 'или' Car (...). Save() '. – falsetru