2011-02-03 27 views
0

我創建了高度重視媒體對博客文章的模型:Django的 - 附件的垃圾收集

class MediaAttachment(models.Model): 
    media = models.ForeignKey(Media, related_name='attachment') 
    content_type = models.ForeignKey(ContentType) 
    object_id = models.PositiveIntegerField(db_index=True) 
    object = generic.GenericForeignKey('content_type', 'object_id') 

它運作良好,但是當我是否附加一些媒體到博客條目,然後刪除該博客條目中,該條目的附件保留在MediaAttachment表中。 GC對MediaAttachment表進行GC的最明智的方法是什麼?信號是做到這一點的最佳方式嗎?

回答

0

好的,所以我設法使用下面的方法很好地工作。

我加入這個信號我MediaAttachment型號:

post_delete.connect(MediaAttachment.objects.delete_attachment) 

然後我刪除方法是這樣的:

def delete_attachment(self, instance, *args, **kwargs): 
    ctype = ContentType.objects.get_for_model(instance) 
    return self.filter(content_type=ctype, object_id=instance.pk).delete() 
1

信號?

http://docs.djangoproject.com/en/1.2/ref/models/instances/#deleting-objects

號只需添加一個delete方法「級聯」的刪除相關對象。

+0

我這個問題是我必須覆蓋的刪除方法在我的博客模型來刪除MediaAttachment模型中的條目...我寧願保留與MediaAttachment相關的所有邏輯,並且它是MediaAttachment模型本身中的表格。理想情況下,博客模型根本不會引用MediaAttachment並獨立執行。 – Hanpan 2011-02-03 14:04:02