Django在使用models生成數據庫表時報錯: __init__() missing 1 required positional argument: 'on_delete'

Django 提供完善的模型(model)層主要用來建立和存取數據,不須要咱們直接對數據庫操做。
Django 模型基礎知識:
  一、每一個模型是一個 Python 類,繼承 django.db.models.model 類。
  二、該模型的每一個屬性表示一個數據庫表字段。數據庫

程序代碼以下:django

# 建立應用程序數據表模型(對應數據庫的相關操做)
from django.db import models                 # 導入models模塊

class Event(models.Model):                     # 建立Event類,繼承models.Model
    name = models.CharField(max_length=100) limit = models.IntegerField() status = models.BooleanField() def __str__(self): return self.name class Guests(models.Model):                          # 建立Guests,繼承models.Model
    event = models.ForeignKey('Event')           # 引用外鍵,即Event對象 
    realname = models.CharField(max_length=64) phone = models.CharField(max_length=16) class Meta: unique_together = ("event","phone") def __str__(self): return self.realname            

執行後報錯信息以下:編輯器

根據報錯提示能夠看出緣由 ,說少了一個必須的位置參數:on_delete,這個不耍賴,確實是少了一個這樣的參數。函數

其實在編輯器中這一步的代碼也是有提示的:spa

在這一行的末尾括號處有個小的下劃線。前邊說了少了一個參數 ,可是應該怎麼把這個參數加進去呢????code

解決辦法:對象

將文中的這一行代碼:blog

      event = models.ForeignKey('Event')
改成:
      event = models.ForeignKey('Event',on_delete = models.CASCADE)

雖然知道爲解決辦法可是到底爲啥子會報這個錯呢?

緣由:在django2.0後,定義外鍵和一對一關係的時候須要加on_delete選項,此參數爲了不兩個表裏的數據不一致問題,否則會報錯。

固然on_delete這個參數的值不單單有:CASCADE
還有以下:
CASCADE 此值設置,是級聯刪除
PROTECT 此值設置,是會報完整性錯誤
SET_NULL 此值設置,會把外鍵設置爲null,前提是容許爲null
SET_DEFAULT 此值設置,會把設置爲外鍵的默認值
SET() 此值設置,會調用外面的值,能夠是一個函數
相關文章
相關標籤/搜索