1. 程式人生 > >Django-2.0 ForeignKey(on_delete)

Django-2.0 ForeignKey(on_delete)

CASCADE:
`級聯刪除。Django模擬SQL約束ON DELETE CASCADE的行為,並刪除包含ForeignKey的物件。

PROTECT:
`防止刪除被引用的物件,通過引發 ProtectedError一個子類 django.db.IntegrityError。

SET_NULL:
設定ForeignKeynull; 這是唯一可能 null的True。

SET_DEFAULT:
將ForeignKey其設定為其預設值; ForeignKey必須設定預設值 。

SET():
設定為ForeignKey傳遞給的值 SET(),或者如果傳遞了可呼叫物件,則呼叫它的結果。在大多數情況下,為了避免在匯入models.py時執行查詢,必須傳遞可呼叫物件:

如下為官方對set()引數示例:

from django.conf import settings
from django.contrib.auth import get_user_model
from django.db import models

def get_sentinel_user():
    return get_user_model().objects.get_or_create(username='deleted')[0]

class MyModel(models.Model):
    user = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        on_delete=models.SET(get_sentinel_user),
    )