missing 1 required positional argument: 'on_delete'報錯解決方案


最近在使用Python的Django框架開發web站點,通過models.py文件建表后,執行數據庫遷移(命令行:mange.py makemigrations)時報錯,下面是查看官方文檔后找到的解決方案。

官方文檔:Model field reference

 

報錯內容:

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,基本都可以解決。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM