溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

關于Django2.0外鍵參數(shù)on_delete使用方法的案例分析

發(fā)布時間:2020-08-01 11:53:58 來源:億速云 閱讀:141 作者:清晨 欄目:編程語言

小編給大家分享一下關于Django2.0外鍵參數(shù)on_delete使用方法的案例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家學習,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去學習方法吧!

最新的django2.0使用外鍵(ForeignKey)和一對一(OneToOneField)的時候,必須添加on_delete參數(shù),不然就會報錯。

剛使用django2.0的朋友,總是遇到類似下面的報錯,這就是沒有給外鍵添加on_delete參數(shù)的原因。

TypeError: __init__() missing 1 required positional argument: 'on_delete'

官方案例:

一對一(OneToOneField)

from django.conf import settings
from django.db import models
class MySpecialUser(models.Model):
    user = models.OneToOneField(settings.AUTH_USER_MODEL,on_delete=models.CASCADE,)
    supervisor = models.OneToOneField(settings.AUTH_USER_MODEL,on_delete=models.CASCADE,related_name=
    'supervisor_of',)

一對多(ForeignKey)

from django.db import models
class AbstractCar(models.Model):
    manufacturer = models.ForeignKey('Manufacturer', on_delete=models.CASCADE)
    class Meta:
        abstract = True

下面下整理的on_delete參數(shù)的各個值的含義:

on_delete=None,               # 刪除關聯(lián)表中的數(shù)據(jù)時,當前表與其關聯(lián)的field的行為
on_delete=models.CASCADE,     # 刪除關聯(lián)數(shù)據(jù),與之關聯(lián)也刪除
on_delete=models.DO_NOTHING,  # 刪除關聯(lián)數(shù)據(jù),什么也不做
on_delete=models.PROTECT,     # 刪除關聯(lián)數(shù)據(jù),引發(fā)錯誤ProtectedError
# models.ForeignKey('關聯(lián)表', on_delete=models.SET_NULL, blank=True, null=True)
on_delete=models.SET_NULL,    # 刪除關聯(lián)數(shù)據(jù),與之關聯(lián)的值設置為null(前提FK字段需要設置為可空,一對一同理)
# models.ForeignKey('關聯(lián)表', on_delete=models.SET_DEFAULT, default='默認值')
on_delete=models.SET_DEFAULT, # 刪除關聯(lián)數(shù)據(jù),與之關聯(lián)的值設置為默認值(前提FK字段需要設置默認值,一對一同理)
on_delete=models.SET,         # 刪除關聯(lián)數(shù)據(jù),
 a. 與之關聯(lián)的值設置為指定值,設置:models.SET(值)
 b. 與之關聯(lián)的值設置為可執(zhí)行對象的返回值,設置:models.SET(可執(zhí)行對象)

多對多不需要on_delete,這就不多說了。想要了解更多on_delete的資料,可去官網進行查看。

以上是關于Django2.0外鍵參數(shù)on_delete使用方法的案例分析的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業(yè)資訊頻道!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經查實,將立刻刪除涉嫌侵權內容。

AI