Django 的内容类型框架不会触发级联删除



假设以下模型:

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')

如果我创建一个DeltaCheck和几个日志,然后删除DeltaCheck,日志也被删除:

In [7]: Log.objects.count()
Out[7]: 10
In [8]: DeltaCheck.objects.get().delete()
In [9]: Log.objects.count()
Out[9]: 0

但是如果我删除用户(字段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

为什么?好像是个bug。

编辑1:

奇怪的是,在失败的情况下,pre_delete和post_delete信号都被触发…中间发生了什么?

编辑2:

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

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

正如错误报告所述,这确实是一个现在已经修复的错误。

最新更新