2010-09-01 17 views
5

Ho 2 ascoltatori definiti:Django: L'invio di segnali - Non capire la documentazione

def update_dashbaord_modified_date(sender, **kwargs): 
    """Listen for changes to Goal, Action, etc. since we 
    want to update the date modified on Dashbaord when a change occurs.""" 
    ... do something ... 

post_save.connect(update_dashbaord_modified_date) # Register to listen for post_save signals 
post_delete.connect(update_dashbaord_modified_date) # Register to listen for post_delete signals 

E ora, dopo che v'è una modifica a un obiettivo o aggiunge un gol (modello di classe Gol), voglio che salva per inviare un segnale. Come è stato implementato. Non capisco la documentazione per questo.

Grazie

risposta

5
  1. Definire i segnali nel your_app/signals.py (App che sollevano segnale, non ascoltare)

    from django.dispatch import Signal
    my_signal = Signal(providing_args=["instance", "args", "kwargs"])

  2. nel modello/vista, da cui si desidera aumentare il segnale

    ...do some processing
    my_signal.send(sender=self.__class__, args, kwargs)
    # kwargs contains type of action, in your case
    # action= 'Added'|'Modified'|'Deleted",

  3. qualche altro posto nel codice (dove mai si desidera ascoltare)

    my_signal.connect(this_is_my_call_back_method)

2

Dalla documentazione Django:

Dove dovrebbero vivere questo codice?

È possibile inserire la gestione dei segnali e il codice di registrazione ovunque si desideri. Tuttavia, è necessario assicurarsi che il modulo in cui è inserito venga importato nei primi giorni del in modo che la gestione del segnale venga registrata prima che tutti i segnali debbano essere inviati a . Questo rende la tua app models.py un buon posto per mettere la registrazione di gestori di segnale.

È possibile importare update_dashbaord_modified_date in you models.py e dopo la definizione della classe aggiungere il metodo ai gestori post_save e post_delete.

from signals import update_dashbaord_modified_date 
class myModel(models.Model): 
    stuff 
post_save.connect(update_dashbaord_modified_date) 
post_delete.connect(update_dashbaord_modified_date) 
+0

Sì, ho letto che nella documentazione. Tuttavia, non riesco a capire quale sia il post del modello obiettivo salvare per inviare il segnale. Oppure, non devo preoccuparmene perché il segnale viene sempre inviato? –

+0

Corretto, per impostazione predefinita i tuoi modelli invieranno sempre segnali per l'evento specificato. – awithrow

Problemi correlati