2010-05-21 13 views
5

Sto lavorando a un progetto Django e voglio inviare un segnale quando qualcosa viene aggiunto al set relativo di qualche modello. Per esempio. abbiamo un proprietario che ha una serie di oggetti da collezione e ogni volta che viene chiamato il metodo owner.collectable_set.add(something), voglio un segnale come collectable_added o qualcosa del genere. I segnali sono chiari per me, ma non so quale gestore (?) Contenga il metodo "aggiungi" che voglio sovrascrivere.Come sovrascrivere il metodo "aggiungi" di un set correlato in Django

Modifica per la richiesta di Xavier per fornire maggiori dettagli: si può facilmente ignorare il metodo save di un modello, semplicemente definendo esso e chiamando il "super save" in modo che viene correttamente salvato con alcune funzionalità in più. Ma mi chiedo dove sovrascrivere il metodo add di un set correlato.

Gosh, penso di non aver fornito ulteriori dettagli, ma penso che dovrebbe essere chiaro cosa voglio fare anche dal primo paragrafo.

Modifica 2:This è il metodo che voglio sovrascrivere. Si consiglia di farlo, o suggerisci un altro modo per posizionare l'invio del segnale?

+0

La tua domanda è davvero vaga. Se puoi fornire uno pseudo-codice o cercare di spiegarlo meglio, penso che più persone potrebbero aiutare. –

risposta

0

Penso che stiate cercando il RelatedManager Class.

+0

Grazie per la risposta. Sembra la soluzione, ma ho dimenticato di menzionare che mi sto occupando di una relazione m2m. Quindi in questo caso la classe ManyRelatedManager sarebbe quella da estendere o inserire il segnale in. MA non è banale estendere questa classe poiché è generata dinamicamente. Grazie comunque. Pubblicherò una soluzione che ho trovato ma non ho testato. – mamachanko

3

Questa è la soluzione che ho trovato, il m2m_changed signal. Mi sono preso un po 'di ricerche e di letture. Inoltre, ho scoperto che non è banale estendere la classe ManyRelatedManager, che sarebbe stata l'altra opzione. Ma con il segnale m2m_changed posso contare su funzioni integrate che sono il modo preferito per la maggior parte del tempo.

0

Dopo molte ricerche (grazie al suggerimento di questo Paolo), mi sono imbattuto in questo snippet che ha contribuito a spiegare l'attuazione m2m_changed a intercettare non sovrascrivere il metodo add sul ManyRelatedManager. Sembra che il manager su una relazione molti-a-molti sia al volo, quindi non è banale sovrascrivere il metodo.

Problemi correlati