我有一个相当通用的模型,如下:
class Keyword(models.Model):
ancestors = models.ManyToManyField(Keyword)
name = models.CharField()
description = models.CharField()
麻烦的是,我有几种不同类型的关键字,它们都有不同形式的业务逻辑。例如,有些人从未被允许拥有任何祖先。其他人永远不可能是祖先。
它变得更复杂,但基本问题是:我可以创建一个平面类并可能使用类型枚举,但是我不知道如何强制执行,例如,祖先只能是一个某种类型。或者我可以创建类的层次结构,但之后我将无法执行类似models.ManyToManyField(Keyword)的操作,因为我需要包含多个类型。
我认为我可以解决这个困境,但它很混乱,并且看起来并不像清洁的业务逻辑。有关做得好的任何建议吗?
答案 0 :(得分:1)
我认为你在描述single-table inheritance。 Django目前不支持它。
在支持的选项中,我建议使用Proxy models并通过在子类的重载save()
方法中进行验证来强制执行特定于类的约束。