我正在构建一个显示一组图像的Djano应用程序,以及用于记录特定图像特征的每个图像的表单。用户初始化“项目”,其中它们指定将显示用于评估的图像集。在项目初始化时,我想让用户能够添加自定义布尔字段(即一组复选框),但我无法弄清楚如何构建数据库模型。
例如,用户可能会使用my_project
,image_A.png
和image_B.png
初始化image_C.png
进行评估。他们将为每个图像获取的默认表单允许他们在PASS,FAIL和UNKNOWN之间进行选择。他们可能希望添加自定义字段,例如“裁剪不佳”,“过度曝光”或“模糊”(这个想法是图像可能是全局PASS,但特定于此图像集的上下文的小故障仍然可能记录)。
通常,我试图想出一种在Django中为用户生成的字段建模的方法。
答案 0 :(得分:1)
如果我正确理解,您不需要动态模型字段,而是可以添加模型,其中包含项目中图像的特定属性,如:
class Image(models.Model):
name = models.CharField()
img = models.ImageField()
class ProjectImage(models.Model):
image = models.ForeignKey('Image')
project = models.ForeignKey('Project')
flag = models.CharField(choices=PASS_FAIL_UNKNOWN)
class ProjectImageTag(models.Model):
project_image = models.ForeignKey(ProjectImage)
value = models.CharField()
class Project(models.Model):
images = models.ManyToManyField('Image', through=ProjectImage)
此外,您可以将此类代码存储在json field或postgres hstore field中,而不是单独的表格。
修改强>
使用预定义键进行更改:
class ProjectImage(models.Model):
image = models.ForeignKey('Image')
project = models.ForeignKey('Project')
flag = models.CharField(choices=PASS_FAIL_UNKNOWN)
class Image(models.Model):
name = models.CharField()
img = models.ImageField()
class Project(models.Model):
images = models.ManyToManyField('Image', through=ProjectImage)
class ProjectImageParams(models.Model):
project_image = models.ForeignKey(ProjectImage, related_name='params')
key = models.CharField()
value = models.BooleanField()
图像的参数可以通过ProjectImage()。params.all()获得。是的,django-eav可能是个不错的选择。