可能比较容易用一个例子来解释:多对多关系
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