2011-05-07 28 views
5

Estoy tratando de registrar múltiples señales en un modelo. Parece que cuando registro una señal adicional, elimina la señal anterior.Registro de señales múltiples en Django

from django.dispatch import receiver 
from django.db.models.signals import post_save,post_delete 
from my.app.models import Resource 


@receiver(post_save,sender=Resource) 
def ResourceSaved(sender,**kwargs): 
    print "Saved" 

@receiver(post_delete,sender=Resource) 
def ResourceSaved(sender,**kwargs): 
    print "Deleted" 

que he tomado una mirada alrededor de la documentación, pero no dejo de encontrar más información sobre cómo crear señales personalizados en un formato de clase. No cómo registrarse en el formato de clase.

Me imagino que puedo hacer algo como esto:

@reciver(sender=Resource) 
class SignalAnsweringMachine(object): 
    def post_delete(self,**kwargs): 
     print "delete" 
    def post_save(self,**kwargs): 
     print "save" 

Gracias por su ayuda por adelantado.

Respuesta

11

Está (probablemente sin querer) redefiniendo ResourceSaved. Pruebe esto en su lugar:

@receiver(post_save,sender=Resource) 
def ResourceSaved(sender,**kwargs): 
    print "Saved" 

@receiver(post_delete,sender=Resource) 
def ResourceDeleted(sender,**kwargs): 
    print "Deleted" 
5

Utilizo este breve formulario para registrar dos o más manipuladores.

En mi caso borro la lista de categorías en caché.

from django.dispatch import receiver 
from django.db.models.signals import post_save, post_delete 
from ..models import Category 

all_categories = [] 

# Post save handler for Category model to clear "all_categores" variable 
@receiver(post_save, sender=Category) 
@receiver(post_delete, sender=Category) 
def post_save_category(sender, **kwargs): 
    # clean cached categories 
    global all_categories 
    all_categories = [] 
+1

wow does this work? – eugene

Cuestiones relacionadas