【问题标题】:Django database model: fields depending on the type of the objectDjango 数据库模型:字段取决于对象的类型
【发布时间】:2012-04-05 22:28:04
【问题描述】:

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

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

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

此解决方案的另一个问题是属性的字段类型,这可能会有所不同。因此,或者我将使用 1 种字段类型 (charField) 并尝试对其进行解析,或者我将拥有一个具有不同值字段的表,其中包含最常用的字段类型 (value_integer = models.IntegerField)。在这种情况下,您会得到很多空字段,只是为了让每个属性填写 1 个字段。其实我正在寻找某种字典...

不确定这是否是正确的方法......有什么建议吗?

【问题讨论】:

    标签: python database django model


    【解决方案1】:

    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 适合这种需求)。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-21
    • 2016-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多