1. 程式人生 > 其它 >django 升級到2.0之後,表與表之間關聯的時候,必須要寫on_delete引數,否則會報異常

django 升級到2.0之後,表與表之間關聯的時候,必須要寫on_delete引數,否則會報異常

當執行 python manage.py makemigrations 出現錯誤:TypeError: init() missing 1 required positional argument: ‘on_delete’

解決方案:

定義外來鍵的時候需要加上 on_delete=;
即:contract = models.ForeignKey(Contract, on_delete=models.CASCADE)

原因如下:

django 升級到2.0之後,表與表之間關聯的時候,必須要寫on_delete引數,否則會報異常:
TypeError: init() missing 1 required positional argument: ‘on_delete’

on_delete=None,               # 刪除關聯表中的資料時,當前表與其關聯的field的行為on_delete=models.CASCADE,     # 刪除關聯資料,與之關聯也刪除on_delete=models.DO_NOTHING,  # 刪除關聯資料,什麼也不做on_delete=models.PROTECT,     # 刪除關聯資料,引發錯誤ProtectedError# models.ForeignKey('關聯表', on_delete=models.SET_NULL, blank=True, null=True)on_delete=models.SET_NULL,    #
刪除關聯資料,與之關聯的值設定為null(前提FK欄位需要設定為可空,一對一同理)# models.ForeignKey('關聯表', on_delete=models.SET_DEFAULT, default='預設值')on_delete=models.SET_DEFAULT, # 刪除關聯資料,與之關聯的值設定為預設值(前提FK欄位需要設定預設值,一對一同理)on_delete=models.SET, # 刪除關聯資料, a. 與之關聯的值設定為指定值,設定:models.SET(值) b. 與之關聯的值設定為可執行物件的返回值,設定:models.SET(可執行物件)

注:由於多對多(ManyToManyField)沒有 on_delete 引數,所以以上只針對外來鍵(ForeignKey)和一對一(OneToOneField)