最近在使用Python的Django框架開發web站點,通過models.py文件建表后,執行數據庫遷移(命令行:mange.py makemigrations)時報錯,下面是查看官方文檔后找到的解決方案。
報錯內容:
1 class Guest(models.Model): 2 File "C:\Users\dell\guest\sign\models.py", line 18, in Guest 3 event = models.ForeignKey(Event) # 關聯發布會
4 TypeError: __init__() missing 1 required positional argument: 'on_delete'
models.py文件:
1 from django.db import models 2
3 # Create your models here.
4 # 發布會表
5 class Event(models.Model): 6 name = models.CharField(max_length=100) # 發布會標題
7 limit = models.IntegerField() # 參加人數
8 status = models.BooleanField() # 狀態
9 address = models.CharField(max_length=200) # 地址
10 start_time = models.DateTimeField('event time') # 發布會時間
11 create_time = models.DateTimeField(auto_now=True) # 創建時間(自動獲取當前時間)
12
13 def __str__(self): 14 return self.name 15
16 # 嘉賓表
17 class Guest(models.Model): 18 event = models.ForeignKey(Event) # 關聯發布會
19 realname = models.CharField(max_length=64) # 姓名
20 phone = models.CharField(max_length=16) # 手機號
21 email = models.EmailField() # 郵箱
22 sign = models.BooleanField() # 簽到狀態
23 create_time = models.DateTimeField(auto_now=True) # 創建時間(自動獲取當前時間)
24
25 class Meta: 26 unique_together = ("event", "phone") 27
28 def __str__(self): 29 return self.realname
解決方法:將報錯提示的models文件第18行修改為下面的內容即可:
event = models.ForeignKey('Event','on_delete=models.CASCADE,')
報錯原因:
classForeignKey(to,on_delete,** options)
多對一的關系,需要兩個位置參數:模型相關的類和on_delete選項。(on_delete實際上並不需要,但是不提供它會給出棄用警告,這在Django 2.0中將是必需的,1.8及以前的版本不需要)
要創建遞歸關系,即:與自身具有多對一關系的對象使用。 models.ForeignKey('self', on_delete=models.CASCADE)
PS:Django的版本更新比較頻繁,每次版本迭代都有些改動,有問題直接查官方文檔或者Stack Overflow,基本都可以解決。
