[PYTHON] Django Foreign Key on_delete Argument

Referenz

Django Official stackoverflow

ForeignKey on_delete Bewegung

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

Recommended Posts

Django Foreign Key on_delete Argument
Schreiben Sie externe Schlüsseleinschränkungen in Django
Djangos External Key Tutorial in 10 Minuten
Django 1.4.2 Generierung von Sitzungsschlüsseln
Fremdschlüssel in SQLite von Python [Hinweis]