Python 在django中为模型和对象添加元数据
我正在编写一个基于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": { "
[
{
"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
足够清晰;这也意味着您的数据库表将被正确命名,而无需指定。谢谢您的回答!我想我可以用同样的方式扩展我的装置,包括这些附加属性。谢谢大家对命名大会的关注。谢谢你的回答!我想我可以用同样的方式扩展我的装置,包括这些附加属性。感谢大家对命名大会的关注。