可能比較容易用一個例子來解釋:多對多關係
class Item(models.Model):
# ...
class ComplexItem(Item):
components = models.ManyToManyField(Item, through='ComponentItem', symmetrical=False, related_name='component_of')
class ComponentItem(models.Model):
# ...
item = models.ForeignKey(ComplexItem)
component = models.ForeignKey(Item, related_name='used_in_items
我想一個項目表,使用一個名稱,價格等,然後我想定義ComplexItems這是物品本身的權利,但他們需要不同數量的其他物品。
以上將導致以下異常的管理應用程序:
<class 'inventory.models.ComponentItem'> has more than 1 ForeignKey to <class 'inventory.models.ComplexItem'>
我需要重寫在ComplexItem實例方法和一般單獨從項目的行爲和繼承是有道理的,從純數據視圖。
這種關係是否存在一些備選定義?我也想避免在ComponentItem.component和ComplexItem.components上需要'related_name'。
你爲什麼試圖創建基礎和繼承模型之間的關係?也許一些背景信息會很好:你想做什麼?您是否已考慮將基本模型定義爲抽象(http://docs.djangoproject.com/zh/dev/topics/db/models/#abstract-base-classes),以便不創建額外的表格? 「在幾乎所有情況下,抽象繼承都是一個長期的更好的方法。」 (http://jacobian.org/writing/concrete-inheritance/) – arie 2011-05-11 14:20:40
@arie增加了一些背景信息 - 希望它有幫助。這種關係可以通過遞歸ManyToMany來實現,但我想區分複雜和非複雜項目的行爲。 – Cogsy 2011-05-11 15:16:51