2009-07-30 49 views
2

我想使用Django管理界面刪除一些具有多對多關係的對象。標準刪除還會刪除所有相關對象以及確認頁面上顯示的刪除對象列表。但我不需要刪除相關的對象!在Django管理界面中使用多對多關係更智能地刪除對象

假設我們有ContentTopic和ContentItem:

class ContentTopic(models.Model): 
    name = models.CharField() 
    code = models.CharField() 

class ContentItem(models.Model): 
    topic = models.ManyToManyField(ContentTopic, db_index=True,\ 
    blank=True, related_name='content_item') 

所以,我想使用Django管理員刪除ContentTopic實例,但我並不需要刪除所有相關ContentItems。所以,確認頁面應該只顯示要刪除的ContentTopic實例。

什麼是處理這個問題的最好方法?

回答

0

這種情況發生了,因爲它的發展是這樣做的。 如果你想改變這種行爲,一種方法是可以在django.db.models.Model的頂級刪除方法。

delete()方法實際上做了兩件事,首先收集所有依賴對象的列表並刪除它們。因此,在這裏,您可以覆蓋它,獲取依賴對象列表,迭代它並將它們的引用設置爲None,而不是刪除它們。從而乾淨地刪除有關對象。

可能如果您想要在整個過程中使用此行爲,則可以從django.db.models.Models擴展一個類,覆蓋delete(),並從此新類擴展所有模型。