Comme mentionné précédemment, CASCADE supprime l'enregistrement qui possède une clé étrangère et qui fait référence à un autre objet qui a été supprimé. Ainsi, par exemple, si vous avez un site Web de biens immobiliers et que vous avez une propriété qui fait référence à une ville
class City(models.Model):
# define model fields for a city
class Property(models.Model):
city = models.ForeignKey(City, on_delete = models.CASCADE)
# define model fields for a property
et maintenant, lorsque la ville est supprimée de la base de données, toutes les propriétés associées (par exemple, les biens immobiliers situés dans cette ville) seront également supprimées de la base de données.
Maintenant, je veux également mentionner le mérite d'autres options, telles que SET_NULL ou SET_DEFAULT ou même DO_NOTHING. Fondamentalement, du point de vue de l'administration, vous voulez "supprimer" ces enregistrements. Mais vous ne voulez pas vraiment qu'ils disparaissent. Pour de nombreuses raisons. Quelqu'un pourrait l'avoir supprimé accidentellement, ou pour l'audit et le suivi. Et tout simplement pour faire des rapports. Cela peut donc être un moyen de "déconnecter" la propriété d'une ville. Encore une fois, cela dépendra de la façon dont votre application est écrite.
Par exemple, certaines applications ont un champ "supprimé" qui vaut 0 ou 1. Et toutes leurs recherches et vues de liste, etc., tout ce qui peut apparaître dans les rapports ou partout où l'utilisateur peut y accéder à partir du front-end, excluent tout ce qui est "supprimé". deleted == 1
. Cependant, si vous créez un rapport personnalisé ou une requête personnalisée pour obtenir une liste des enregistrements qui ont été supprimés et, plus encore, pour voir quand ils ont été modifiés pour la dernière fois (un autre champ) et par qui (c'est-à-dire qui les a supprimés et quand), cela est très avantageux du point de vue de la direction.
Et n'oubliez pas que vous pouvez revenir sur des suppressions accidentelles aussi simplement que deleted = 0
pour ces dossiers.
Ce que je veux dire, c'est que s'il y a une fonctionnalité, il y a toujours une raison derrière. Pas toujours une bonne raison. Mais une raison. Et souvent une bonne raison aussi.
0 votes
Vous trouverez également une réponse à une question similaire à l'adresse suivante stackoverflow.com/questions/47914325/
1 votes
Le texte de cette question similaire est maintenant listé, ci-dessous, sur cette réponse. Il commence par "FYI, le paramètre on_delete dans les modèles est inversé par rapport à ce qu'il semble être". Il fournit beaucoup plus de détails que les réponses originales.
0 votes
Vous pouvez trouver une bonne réponse dans le lien ci-dessous. medium.com/@inem.patrick/
0 votes
Qu'est-ce que
on_delete=models.DELETE
faire ?0 votes
Veuillez modifier le titre de la question, utilisation de on_delete dans OneToOneField et ForeignKey.