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实现,但我想区分复杂项和非复杂项的行为。