Django wysyła sygnały przed/po_delete, jeśli używasz metody queryset.delete()
, ale czy nie powinno wtedy również wysłać pre/post_save na queryset.update()
?Django: Sygnał na queryset.update
Odpowiedz
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. Sygnał Django po zapisaniu całego modelu
- 2. Jak wysłać sygnał django z innego sygnału
- 3. Sygnał Django za pośrednictwem dekoratora na podstawie metody modelowania?
- 4. Sygnał Django emitujący raz, odebrany dwukrotnie - Dlaczego?
- 5. Odpowiedni sygnał do zabicia serwera deweloperskiego django
- 6. Django wysyła sygnał post_save nieaktualne formsets inline
- 7. Uzyskaj bieżący sygnał logowania użytkownika w Django
- 8. Django: Czy sygnał odbierających dane zwrotne?
- 9. Sygnał Django m2m_changed nie został uruchomiony
- 10. sygnał post_save na m2m polu
- 11. Django 1.2: Jak podłączyć sygnał pre_save do metody klasy
- 12. Czy można selektywnie wyłączyć sygnał post_save (lub inny) w Django?
- 13. Dlaczego sygnał Django post_save daje mi dane pre_save?
- 14. sygnał działa tylko w głównym wątku
- 15. Qt5: Jak czekać na sygnał w wątku?
- 16. Sygnał nodification sygnału Bluetooth
- 17. Sygnał zmiany tekstu GtkEntry
- 18. Nginx + php FPM na Amazon = Linux na wyjściu sygnał 11
- 19. sygnał Uchwyt z sigaction
- 20. Zmieniony sygnał wartości QSlider
- 21. Wyślij sygnał do procesu
- 22. Zastąp zapisać na Django InlineModelAdmin
- 23. Django post_save sygnałów na aktualizację
- 24. Twisted programu i terminu sygnał
- 25. Dekoder DCF77 a hałaśliwy sygnał
- 26. Jak przechwycić sygnał w QML?
- 27. Sygnał QT Nieokreślony błąd odniesienia
- 28. AbstractGoogleClient: Fatal sygnał 11 (SIGSEGV)
- 29. Jak emitować sygnał z QPushButton, gdy mysz na nim wisi?
- 30. PySide czekać na sygnał z głównego wątku w wątku roboczy
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()! –
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. –