Bug #5331
Protéger les modèles référencés, soit en empêchant la suppression des entrées qui références une autre entrée, soit en gérant la suppression avec un SET_NULL le modèle référant.
0%
Description
Il s'agit par exemple du modèle ActType. Dès lors qu'il y a une entrée d'un Act qui pointe sur un ActType, cette entrée ne peut plus être supprimable, il doit être prossible d'utiliser on_delete=models.PROTECT sur la ForeignKey.
Dans ce cas, il faut également que cela ressorte au niveau de l'interface dans la gestion des ressources par exemple, soit en supprimant le bouton "supprimer" soit en affichant à message d'erreur lors de la tentative de suppression.
Il y a d'autres cas, par exemple pour le SchoolLevel où on veut autoriser les suppression des entrées de cette table mais pour éviter la suppression en cascade il faut mettre on_delete=models.SET_NULL sur la ForeginKey level sur le modèle SocialisationDuration.
History
Updated by Mikaël Ates about 10 years ago
- Subject changed from Pour certains modèles, il faudrait empêcher la suppression de ses instances dès lors qu'une autre instance pointe dessus to Protéger les modèles référencés, soit en empêchant la suppression des entrées qui références une autre entrée, soit en gérant la suppression avec un SET_NULL le modèle référant.
- Description updated (diff)
Updated by Benjamin Dauvergne about 10 years ago
Après avoir mis le on_delete=models.PROTECT
, il faut attraper l'exception django.core.exception.ProtectedError
dans la méthode form_valid()
de la CBV, afficher une message d'erreur avec messages.error()
puis retourner une redirection sur la page d'édition. Ça peut être fait génériquement dans la CBV de base qui gère les suppressions.