on_delete correspond à la suppression de l'objet référent Décidez si vous souhaitez supprimer ou conserver l'objet !!
models.py
#Exemple de modèle
class Book(AbstractModel):
publisher = models.ForeignKey(Publisher, on_delete=models.CASCADE)
models.CASCADE Lorsque l'objet référencé (par exemple Publisher) est supprimé Supprimer un objet (par exemple un livre) ensemble Exemple: si vous supprimez un article de blog, vous n'avez pas besoin des commentaires qui lui sont envoyés, supprimez-le donc.
models.PROTECT Même si l'objet référencé (par exemple Publisher) est supprimé Ne supprimez pas d'objets (par exemple, un livre) Si vous souhaitez supprimer tous les objets, vous devez tout faire manuellement.
models.SET_NULL Lorsque l'objet référencé (par exemple Publisher) est supprimé L'objet (par exemple, Book) est défini sur NULL (par exemple, établir est NULL) Exemple: Cela peut être utilisé lors de la suppression d'un utilisateur et pour ne conserver que les commentaires que l'utilisateur a envoyés au blog de manière anonyme.
models.SET_DEFAULT Lorsque l'objet référencé (par exemple Publisher) est supprimé La valeur définie par défaut (exemple: par défaut en établissement) est définie dans l'objet (exemple: Livre).
models.py
publisher = models.ForeignKey(Publisher, on_delete=models.SET_DEFAULT, default='inconnue')
models.SET Remplacez votre propre valeur définie. Passer un appelable.
models.py
def get_publisher():
#Pour le moment, regardez en arrière
return Publisher.objects.all().first()
class Book(AbstractModel):
publisher = models.ForeignKey(Publisher, on_delete=models.SET(get_publisher))
models.RESTRICT
models.py
class Artist(models.Model):
name = models.CharField(max_length=10)
class Album(models.Model):
artist = models.ForeignKey(Artist, on_delete=models.CASCADE)
class Song(models.Model):
artist = models.ForeignKey(Artist, on_delete=models.CASCADE)
album = models.ForeignKey(Album, on_delete=models.RESTRICT)
console
artist_one = Artist.objects.create(name='artist one')
album_one = Album.objects.create(artist=artist_one)
song_one = Song.objects.create(artist=artist_one, album=album_one)
album_one.delete()
# Raises RestrictedError.
#Erreur due à l'existence du morceau référencé
artist_two = Artist.objects.create(name='artist two')
album_two = Album.objects.create(artist=artist_two)
song_two = Song.objects.create(artist=artist_one, album=album_two)
# artist_Notez que vous en utilisez un
artist_two.delete()
# Raises RestrictedError.
# artist_Si vous en supprimez deux, l'album qui est CASCADE sera également supprimé, donc
#Une erreur se produit dans le morceau référencé