Python 在django中为模型和对象添加元数据

Python 在django中为模型和对象添加元数据,python,django,database,Python,Django,Database,我正在编写一个基于Django的应用程序,其中有一个封装各种图像类型的模型。我将其作为固定装置加载,如下所示: [ { "model": "app.ImageTypeModel", "pk": 1, "fields": { "type": "PNG", "dims": 1 } }, { "model": "app.ImageTypeModel", "pk": 2, "fields": { "

我正在编写一个基于Django的应用程序,其中有一个封装各种图像类型的模型。我将其作为固定装置加载,如下所示:

[
  {
    "model": "app.ImageTypeModel",
    "pk": 1,
    "fields": {
      "type": "PNG",
      "dims": 1
    }
  },

  {
    "model": "app.ImageTypeModel",
    "pk": 2,
    "fields": {
      "type": "Custom",
      "dims": 100
    }
  },

  {
    "model": "app.ImageTypeModel",
    "pk": 3,
    "fields": {
      "type": "JPEG",
      "dims": 1
    }
  },

  {
    "model": "app.ImageTypeModel",
    "pk": 4,
    "fields": {
      "type": "BMP",
      "dims": 1
    }
  }
]
class ImageTypeModel(models.Model):
    type = models.CharField(max_length=100)
    dims = models.IntegerField()

    class Meta:
        db_table = "image_type"
相应的模型声明如下所示:

[
  {
    "model": "app.ImageTypeModel",
    "pk": 1,
    "fields": {
      "type": "PNG",
      "dims": 1
    }
  },

  {
    "model": "app.ImageTypeModel",
    "pk": 2,
    "fields": {
      "type": "Custom",
      "dims": 100
    }
  },

  {
    "model": "app.ImageTypeModel",
    "pk": 3,
    "fields": {
      "type": "JPEG",
      "dims": 1
    }
  },

  {
    "model": "app.ImageTypeModel",
    "pk": 4,
    "fields": {
      "type": "BMP",
      "dims": 1
    }
  }
]
class ImageTypeModel(models.Model):
    type = models.CharField(max_length=100)
    dims = models.IntegerField()

    class Meta:
        db_table = "image_type"
此外,我还有如下各种图像实例(为了简化,我删除了一些字段):

现在,对于这些图像类型中的每一种,我都有我想要指定的不同属性。例如,对于
Custom
类型的图像,我可以拥有各种属性,每个属性都可以是特定的数据类型(如整数、字符串、浮点、浮点向量等)。定义这一点的一种方法是为这些数据类型创建一个表,并为每个图像类型创建附加表(让我们称这些表为配置表),其中每一行都是属性名称和关联的数据类型。然后,我可以尝试基于此生成一个自动表单

但是,我不确定如何关联映像类型和关联的配置表。那么,在我最初的fixture示例中,是否建议只添加数据库表名作为另一个字段?或者我应该为每个配置表创建模型,但我不确定如何在夹具代码中引用这些模型


因此,我们正在寻找有关如何解决此类问题的建议,其中还必须为后端中的对象指定这组
元数据
,以及它如何适合django模型和装置。

您可以在抽象基类中定义常见行为,在子类中,只放不同的细节:Django支持

类映像(models.Model):
“”“图形图像。”“”
name=models.CharacterField(最大长度=1024)
后缀=未实现
类元:
抽象=真
类别图像(图像):
“”“可缩放矢量图形(SVG)格式的图形图像。”“”
后缀=“.svg”
版本=型号。字符字段(最大长度=20)
类JPEG图像(图像):
“”“联合图片专家组(JPEG)格式的图形图像。”“”
后缀=“.jpeg”
分辨率=models.IntegerField()
现在数据库中将不会表示
图像
模型
,但其所有定义的功能将可用于子类。因此,
SVGImage
的实例将具有
名称
后缀
版本
属性;
JPEGImage
的实例将具有
名称
后缀
分辨率
属性


顺便说一下:您的Django模型将位于名为
models
的模块中,因此您不应该在类名中添加多余的
…Model
后缀


相反,
fooapp.models.JPEGImage
足够清晰;这还意味着您的数据库表将被正确命名,而无需进行指定。

您可以在抽象基类中定义常见行为,在子类中只放置不同的细节:Django支持

类映像(models.Model):
“”“图形图像。”“”
name=models.CharacterField(最大长度=1024)
后缀=未实现
类元:
抽象=真
类别图像(图像):
“”“可缩放矢量图形(SVG)格式的图形图像。”“”
后缀=“.svg”
版本=型号。字符字段(最大长度=20)
类JPEG图像(图像):
“”“联合图片专家组(JPEG)格式的图形图像。”“”
后缀=“.jpeg”
分辨率=models.IntegerField()
现在数据库中将不会表示
图像
模型
,但其所有定义的功能将可用于子类。因此,
SVGImage
的实例将具有
名称
后缀
版本
属性;
JPEGImage
的实例将具有
名称
后缀
分辨率
属性


顺便说一下:您的Django模型将位于名为
models
的模块中,因此您不应该在类名中添加多余的
…Model
后缀


相反,
fooapp.models.JPEGImage
足够清晰;这也意味着您的数据库表将被正确命名,而无需指定。

谢谢您的回答!我想我可以用同样的方式扩展我的装置,包括这些附加属性。谢谢大家对命名大会的关注。谢谢你的回答!我想我可以用同样的方式扩展我的装置,包括这些附加属性。感谢大家对命名大会的关注。