Django-2.0 ForeignKey(on_delete)

孔梓
2023-12-01

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),
    )
 类似资料: