2017-02-16 22 views
0

我有一個Django 1.6模型結構,其中實例共享一個通用模型實例作爲子類。模型繼承中的狀態共享和刪除

inheritance

在數據庫術語中,有一個A一排B一行,並使用parent_link對IDS進行C一行。

當調用C'.delete()行爲AC被刪除但對於B孤兒記錄。直接實例化A並調用delete將級聯刪除到BC實例。我怎樣才能以最簡單的方式確保刪除BC的實例將刪除父級和同級狀態?

刪除A的實例會導致B和C的鏈接實例被刪除。刪除B會導致B和A刪除。刪除C會導致C和A刪除。

如何刪除任何A,B或C實例刪除所有其他實例,而不管正在調用實例delete()?

作爲一個側面說明,所有實例似乎被刪除,所以在C'調用.delete()當它出現的基本狀態和B'被刪除,但逸岸行了B'將持續,直到另一個基本實例是不會出現在查詢在PK對齊的位置創建。在那種情況下,B'從死亡中重新出現。

這裏的類:

class A(models.Model): 
    # Fields here 

class B(A): 
    a_ptr = models.OneToOneField(A, parent_link=True) 
    # More fields 

class C(A): 
    a_ptr = models.OneToOneField(A, parent_link=True) 
    # More fields 

# Code 
shared_state = A() 
shared_state.save() 
sharer_b = B(a_ptr=shared_state.id) 
charer_c = C(a_ptr=shared_state.id) 
sharer_b.save() 
sharer_c.save() 

# Objective, this should delete all rows for the above? 
sharer_c.delete() 

回答

0

您可以覆蓋你models delete() method或使用post_delete signal。注意:鏈接指向當前版本文檔,但所有這些在1.6版本中都一樣。

+0

我遇到的問題是1.6在哪裏有兩個實例共享一個公共實例(共享一個A的B和C實例)是刪除C刪除了A,但是B的行仍然存在,但孤兒是不可訪問的。 –