Ich war besorgt über on_delete, als ich versuchte, einen externen Schlüssel in Django festzulegen, also fasste ich ihn zusammen.
Ich mache gerade eine Web-App, um Spielturniere abzuhalten, also brauchte ich einen Tisch, um das Turnier mit den Teilnehmern zu verbinden.
Also habe ich ein Modell erstellt, in dem die Teilnehmertabelle die Turniertabelle und die Benutzertabelle mit externen Schlüsseln enthält.
models.py
from django.db import models
from django.contrib.auth.models import User
from games.models import Game
class Participations(models.Model):
Game = models.ForeignKey(Game)
User = models.ForeignKey(User)
Der folgende Fehler tritt während der Migration auf
Traceback (most recent call last):
Game = models.ForeignKey(Game)
TypeError: __init__() missing 1 required positional argument: 'on_delete'
Ich wurde wütend ohne on_delete.
Die Ursache ist einfach, liegt jedoch daran, dass on_delete im Argument nicht angegeben ist.
Übrigens scheint es, dass es von Django 2.0 obligatorisch wurde.
Wenn ich mir den offiziellen Release Note ansehe, heißt es so.
The on_delete argument for ForeignKey and OneToOneField is now required in models and migrations.
** Übersetzen ** Die Argumente ForeignKey und OneToOneField on_delete werden jetzt für die Modellierung und Migration benötigt.
Was ist on_delete?
Dies ist das Verhalten, wenn das referenzierte Objekt gelöscht wird.
https://docs.djangoproject.com/ja/3.0/ref/models/fields/
Nachfolgend finden Sie eine kurze Zusammenfassung, die auf der offiziellen Referenz basiert
on_delete=models.CASCADE Ze, das alle Daten des externen Schlüssels löscht!
on_delete=models.PROTECT Ze das macht es unmöglich zu löschen!
on_delete=models.SET_NULL Wenn es gelöscht wird, werde ich stattdessen NULL setzen! Setzen Sie null = true, wenn Sie diesen Ze verwenden!
on_delete=models.SET_DEFAULT Ze, um den Standardwert beim Löschen zu ersetzen!
on_delete=models.SET(hogehoge) Wenn es gelöscht wird, können Sie eine Funktion usw. aufrufen und einen beliebigen Wert Ze!
on_delete=models.DO_NOTHING Tu nichts Ze!
Es ist ein reichhaltiges Migrationsleben mit on_delete, das Ihrem Zweck entspricht. Ze!