2014-05-07 53 views
0

假設以下型號: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 

這是爲什麼?看起來像一個錯誤。

編輯1:

奇怪的是,無論是pre_delete和post_delete信號在出現故障的情況下解僱......中間會發生什麼?

編輯2:

確定這是怪異的挫折感。如果我定義爲pre_delete信號的空接收器...它的工作原理:/只是說:

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

而現在它的工作原理...

+0

在這個問題上花費了30秒,聽起來像是一個bug。特別是因爲反向泛型關係被刪除的事實純粹是一種有用的實用工具/超出了通常的ORM行爲。 –

+0

的確,這就是爲什麼我在官方bug跟蹤器中打開了一張票https://code.djangoproject.com/ticket/22594現在我將刪除信號接收器中的那些人...... –

回答