代码之家  ›  专栏  ›  技术社区  ›  dance2die

Django模型-多类还是少类?处理“不完全是继承”关系

  •  2
  • dance2die  · 技术社区  · 6 年前

    class Keyword(models.Model):
        ancestors = models.ManyToManyField(Keyword)
        name = models.CharField()
        description = models.CharField()
    

    问题是,我有几种不同类型的关键字,它们都有不同形式的业务逻辑。例如,有些人永远不允许有任何祖先。其他人永远不能成为祖先。

    它变得更加复杂,但基本问题是:我可以创建一个平面类,并可能使用类型枚举,但我不确定如何强制执行,例如,祖先只能是某一类型。或者我可以创建一个类的层次结构,但这样我就不能像models.ManyToManyField(关键字)那样做,因为我需要包含多个类型。

    1 回复  |  直到 15 年前
        1
  •  1
  •   Alexander Lebedev    15 年前

    single-table inheritance

    我建议使用的支持选项不足 Proxy models 并通过重载中的验证来实施特定于类的约束 save() 子类的方法。