Project

General

Profile

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.

Added by Mikaël Ates over 9 years ago. Updated over 9 years ago.

Status:
Rejeté
Priority:
Normal
Assignee:
-
Target version:
Start date:
26 August 2014
Due date:
% Done:

0%

Estimated time:
Patch proposed:
No
Planning:

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

#1

Updated by Mikaël Ates over 9 years ago

  • Description updated (diff)
#2

Updated by Mikaël Ates over 9 years ago

  • Description updated (diff)
#3

Updated by Mikaël Ates over 9 years ago

  • Description updated (diff)
#4

Updated by Mikaël Ates over 9 years ago

Répondrait en partie à #4743.

#5

Updated by Mikaël Ates over 9 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)
#6

Updated by Benjamin Dauvergne over 9 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.

Also available in: Atom PDF