Django中用户生成的字段

时间:2013-08-23 16:22:10

标签: django django-models

我正在构建一个显示一组图像的Djano应用程序,以及用于记录特定图像特征的每个图像的表单。用户初始化“项目”,其中它们指定将显示用于评估的图像集。在项目初始化时,我想让用户能够添加自定义布尔字段(即一组复选框),但我无法弄清楚如何构建数据库模型。

例如,用户可能会使用my_projectimage_A.pngimage_B.png初始化image_C.png进行评估。他们将为每个图像获取的默认表单允许他们在PASS,FAIL和UNKNOWN之间进行选择。他们可能希望添加自定义字段,例如“裁剪不佳”,“过度曝光”或“模糊”(这个想法是图像可能是全局PASS,但特定于此图像集的上下文的小故障仍然可能记录)。

通常,我试图想出一种在Django中为用户生成的字段建模的方法。

1 个答案:

答案 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可能是个不错的选择。