Django 继承模型与其父模型之间的多个关系

Django 继承模型与其父模型之间的多个关系,django,django-models,Django,Django Models,用一个例子可能最容易解释: class Item(models.Model): # ... class ComplexItem(Item): components = models.ManyToManyField(Item, through='ComponentItem', symmetrical=False, related_name='component_of') class ComponentItem(models.Model): # ... item

用一个例子可能最容易解释:

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
我想要一个项目表,包括名称、价格等。然后我想定义复杂项目,这些项目本身就是项目,但它们需要不同数量的其他项目

上述情况导致管理应用程序出现以下异常:

的外键超过1个

我需要重写ComplexItem中的实例方法,通常将行为与项分开,继承从纯数据视图中是有意义的


这种关系是否有其他定义?我还希望避免在ComponentItem.component和ComplexItem.components上都需要“相关名称”。

您需要回到绘图板。虽然从技术上讲,一个模型既可以继承另一个模型,也可以同时由另一个模型组成,但它会很快变得粘乎乎的


尝试使
ComplexItem
仅从
models继承。Model
项类似。我敢打赌,单靠改变就能解决一切问题。

上述模型实际上运行良好(我想,我目前还没有测试并决定反对它)。但是,为ComplexItem生成的表只有一列指向项,这是非常无用的

ComponentItem的功能仍然可以通过通过ComponentItem定义从项到“自身”的多个关系来实现

定义单独的行为和创建一个单独的行为一样简单

上面的实际错误来自于我的admin.Inline无法为ComponentItem选择正确的外键,这是可以解决的


我可能会回到上面的继承,但这暂时有效。

为什么要尝试在基础和继承模型之间创建关系?也许一些背景信息会很好:你想做什么?您是否考虑过将基础模型定义为abstract(),这样就不会创建额外的表?“从长远来看,几乎在所有情况下,抽象继承都是一种更好的方法。”()@arie补充了一些背景信息——希望能有所帮助。这种关系可以通过递归的manytomy实现,但我想区分复杂项和非复杂项的行为。