on_delete ist, wenn das Referrer-Objekt gelöscht wird Entscheide, ob du das Objekt löschen oder behalten willst !!
models.py
#Beispielmodell
class Book(AbstractModel):
publisher = models.ForeignKey(Publisher, on_delete=models.CASCADE)
models.CASCADE Wenn das referenzierte Objekt (z. B. Publisher) gelöscht wird Löschen Sie ein Objekt (zB Buch) zusammen Beispiel: Wenn Sie einen Blog-Artikel löschen, müssen die Kommentare nicht an ihn gesendet werden. Löschen Sie ihn daher.
models.PROTECT Auch wenn das referenzierte Objekt (zB Publisher) gelöscht wird Objekte nicht löschen (zB Buch) Wenn Sie alle Objekte löschen möchten, müssen Sie alles manuell ausführen.
models.SET_NULL Wenn das referenzierte Objekt (z. B. Publisher) gelöscht wird Objekt (zB Buch) wird auf NULL gesetzt (z. B. Einrichten ist NULL) Beispiel: Dies kann verwendet werden, wenn ein Benutzer gelöscht wird und nur die Kommentare, die der Benutzer anonym an das Blog gesendet hat, beibehalten werden sollen.
models.SET_DEFAULT Wenn das referenzierte Objekt (z. B. Publisher) gelöscht wird Der standardmäßig festgelegte Wert (Beispiel: Standardwert bei Einrichtung) wird im Objekt festgelegt (Beispiel: Buch).
models.py
publisher = models.ForeignKey(Publisher, on_delete=models.SET_DEFAULT, default='Unbekannt')
models.SET Ersetzen Sie Ihren eigenen Sollwert. Übergeben Sie eine Anrufbare.
models.py
def get_publisher():
#Schauen Sie vorerst zurück
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.
#Fehler aufgrund des Vorhandenseins des referenzierten Songs
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_Beachten Sie, dass Sie eine verwenden
artist_two.delete()
# Raises RestrictedError.
# artist_Wenn Sie zwei löschen, wird auch das Album CASCADE gelöscht
#Im referenzierten Song tritt ein Fehler auf