[PYTHON] Argument Django Foreign Key on_delete

référence

Django Official stackoverflow

Mouvement ForeignKey on_delete

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é

Recommended Posts

Argument Django Foreign Key on_delete
Ecrire des contraintes de clé externe dans Django
Tutoriel de clé externe de Django en 10 minutes
Génération de clé de session Django 1.4.2
Clé étrangère dans SQLite de Python [Note]