2009-11-07 23 views

Odpowiedz

6

Być może jest, ale tak nie jest. .update() nie wywołuje metody .save() na poszczególnych obiektach w QuerySet, a zamiast tego aktualizuje wszystko w jednym wywołaniu SQL (UPDATE, jak to się dzieje). Ponieważ nie używa funkcji .save(), niespójne byłoby wywoływanie sygnałów przed i po zapisie. Z pewnością mogę sobie wyobrazić przypadki użycia, w których ktoś mógłby chcieć, żeby to zrobił, ale mogę też wyobrazić sobie przypadki, w których nie byłoby to możliwe. Wydaje mi się, że nie wywoływanie sygnałów przed i po zapisie jest właściwym zachowaniem, ponieważ pozostawia większą elastyczność programistom. Nie jest trudno wyzwolić te sygnały ręcznie i myślę, że zdecydowanie lepszym rozwiązaniem jest poproszenie programistów, aby pamiętali o wyzwalaniu sygnałów, aby uzyskać pożądane zachowanie, zamiast proszenia ich, aby pamiętali o odłączeniu sygnałów, aby uniknąć niepożądanych zachowań.

+1

Cóż, z wymienionych powodów uważam, że jest to niespójne zachowanie, ponieważ metoda queryset.delete() również nie wywołuje metody delete() w pojedynczych instancjach, ale wysyła te same sygnały co polecenie model.delete()! –

+1

Ponadto, aby móc wysyłać sygnały związane z zapisem w zestawie zapytań, w zasadzie konieczne jest dokonanie wyboru elementów oprócz aktualizacji, eliminując korzyści wynikające z posiadania metody aktualizacji zbiorczej. –

Powiązane problemy