Django的内容类型框架不触发Cascade d

2024-10-03 02:46:09 发布

您现在位置:Python中文网/ 问答频道 /正文

假设以下模型:

class DeltaCheck(models.Model):
    logs = generic.GenericRelation('Log')
    title = models.CharField(max_length=50)
    owner = models.ForeignKey(User)

class Log(models.Model):
    title = models.CharField(max_length=50)

    content_type = models.ForeignKey(ContentType)
    object_id = models.PositiveIntegerField()
    content_object = generic.GenericForeignKey('content_type', 'object_id')

如果我创建了一个增量检查和几个日志,然后删除了增量检查,那么这些日志也会被删除:

^{pr2}$

但是,如果我删除用户(字段owner),则DeltaCheck将被删除,而不是日志,请看:

In [14]: Log.objects.count()
Out[14]: 10

In [15]: DeltaCheck.objects.get().owner.delete()

In [16]: DeltaCheck.objects.all()
Out[16]: []

In [17]: Log.objects.count()
Out[17]: 10

为什么?好像是个虫子。

编辑1:

奇怪的是,在失败的情况下,前删除和后删除信号都会被触发。。。中间会发生什么?

编辑2:

好吧,这很奇怪。如果我为pre_delete信号定义一个空接收器。。。刚刚添加了:/it:

@receiver(pre_delete)
def recv(**kwargs):
    pass

现在它起作用了。。。


Tags: inlogmodelobjectsobjecttitlemodelscontent