[PYTHON] Die Geschichte, dass es notwendig war, on_delete anzugeben, nachdem der externe Schlüssel in der Modelländerung von Django angegeben wurde

Ich war besorgt über on_delete, als ich versuchte, einen externen Schlüssel in Django festzulegen, also fasste ich ihn zusammen.

Womit ich beschäftigt war

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)

Was ist passiert

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.

Ursache

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.

Versionshinweis zu Django 2.0

Verwendung von on_delete

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!

Zusammenfassung

Es ist ein reichhaltiges Migrationsleben mit on_delete, das Ihrem Zweck entspricht. Ze!

Recommended Posts

Die Geschichte, dass es notwendig war, on_delete anzugeben, nachdem der externe Schlüssel in der Modelländerung von Django angegeben wurde
Die Geschichte, dass es notwendig war, on_delete anzugeben, nachdem der externe Schlüssel in der Modelländerung von Django angegeben wurde
Wenn Sie den Wert mithilfe von Auswahlmöglichkeiten in der Vorlage im Django-Modell anzeigen möchten
So ändern Sie das Erscheinungsbild nicht ausgewählter Fremdschlüsselfelder in Djangos Modellformular
So legen Sie das Schema in den Django-Datenbankeinstellungen fest
Python-Ertrag verstehen Wenn Sie Ertrag in eine Funktion einfügen, wird dieser in einen Generator geändert
Was tun, wenn in Python minus Null angezeigt wird?
Wenn Sie einer Variablen in Python einen CSV-Export zuweisen möchten
Überprüfen Sie, ob Sie in Python eine Verbindung zu einem TCP-Port herstellen können
Was tun, wenn auf pipenv der Fehler "Keine Versionen gefunden" angezeigt wird?
Machen Sie einen beliebigen Schlüssel zum Primärschlüssel im Django-Modell
Wenn in Python ein "Unicode-Dekodierungsfehler" auftritt
Was tun, wenn in pip ein Unicode-Dekodierungsfehler auftritt?
Wenn Sie in der for-Anweisung plt.save möchten
Was tun, wenn bei yum ein Metalink für Repository-Fehler nicht abgerufen werden kann?
[Python] So überprüfen Sie, ob der Schlüssel im Wörterbuch vorhanden ist
Warum ist Pythons main () -if-Anweisung angehängt?
Eine Geschichte darüber, wie man einen relativen Pfad in Python angibt.
Ändern Sie das Standardausgabeziel in eine Datei in Python
Was tun, wenn pip in Homebrew einen DistributionError ausgibt?
So importieren Sie Dateien in Python an eine beliebige Stelle
Was tun, wenn Overalls "Abdeckung unbekannt" werden?
Was tun, wenn in tf.train.start_queue_runners () ein 0xC0000005-Fehler auftritt?
So überprüfen Sie, ob ein Wert in einem Aufzählungstyp vorhanden ist
Was tun, wenn Sie sich nicht als root anmelden können?
Einfache Lösung, wenn Sie Ihr EC2-Schlüsselpaar verlieren
Was zu tun ist, wenn Sie sich über "Umkehrungen" ärgern, muss eine 2D-Liste sein ... im matplotlib-Pfeil
[Django] Was tun, wenn das zu erstellende Modell viele Felder enthält?
Was tun, wenn beim Versuch, model.save mit Keras zu modellieren, der Fehler "get_config" überschrieben werden muss?