2009-11-07 15 views

risposta

6

Forse è necessario, ma non è così. .update() non chiama il metodo .save() sui singoli oggetti in QuerySet e aggiorna il tutto in un'unica chiamata SQL (UPDATE, come accade). Dal momento che non usa .save(), sarebbe incoerente richiamare i segnali pre- e post-salvataggio. Posso certamente immaginare casi d'uso in cui si potrebbe desiderare di farlo, ma posso anche immaginare casi in cui uno non lo farebbe. Mi sembra che non chiamare i segnali pre- e post-save sia il comportamento corretto in quanto lascia una maggiore flessibilità al programmatore. Non è difficile attivare questi segnali manualmente, e penso che sia sicuramente una decisione progettuale migliore chiedere ai programmatori di ricordare di attivare i segnali per ottenere il comportamento desiderato piuttosto che chiedere loro di ricordare di disconnettere i segnali per evitare comportamenti indesiderati.

+1

Benché le ragioni menzionate ritengo che questo comportamento sia in qualche modo incoerente, perché il metodo queryset.delete() non chiama anche delete() sulle singole istanze, ma invia gli stessi segnali di model.delete()! –

+1

Inoltre, per poter inviare segnali di salvataggio su un queryset, in sostanza dovrebbero eseguire una selezione per gli elementi oltre all'aggiornamento, eliminando i vantaggi derivanti dall'avere un metodo di aggiornamento di massa. –

Problemi correlati