Django数据库模型:字段取决于对象的类型

时间:2012-03-21 11:47:02

标签: python database django model

我有一些将在同一庄园中使用的物品。此对象分类在此对象的预定义类型中。每种类型都具有属于此类对象的属性。 为了在模型中得到这个,我想到了这个模型表:

  • 一个包含对象类型的表
  • 具有属于该类型的预定义属性的一个表(具有该字段的描述/帮助文本,是属性需求的属性,字段的类型等)
  • 一个表格,其中的对象与表格有关系 属性(此列表中的下一个)
  • 一个包含对象属性及其值的表(参见 其定义的预定义属性)

它确实有效,但需要一些编程来保持一致。

此解决方案的另一个问题是属性的字段类型,这可能不同。所以或者我将使用1字段类型(charField)并尝试解析它,或者我将使用具有最常用字段类型的不同值字段的表(value_integer = models.IntegerField)。在这种情况下,您可以获得大量的emtpy字段,只需要为每个属性填充1个字段。其实我在寻找某种字典...

不确定这是否是正确的方法....任何建议?

1 个答案:

答案 0 :(得分:0)

Django的方法是为每个对象类型定义一个模型类,正如所有Django的功能(管理,表单,外部应用程序......)所期望的那样。

您可以定义超类并使用model inheritance,例如:

class BaseThing(models.Model):
    # fields/relations for all types of things

class FooThing(BaseThing):
    # fields/relations for things of type "foo"

class BarThing(BaseThing):
    # fields/relations for things of type "bar"

在那里,您可以像往常一样predefine defaults

如果您希望您的用户在管理员中创建他们的类,那么请考虑另一个框架(例如eZ Publish适合此需求)。