1

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

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

一般来说,我试图想出一种在 Django 中对用户生成的字段进行建模的方法。

4

1 回答 1

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 字段或 postgres hstore 字段中,而不是单独的表中。

编辑

预定义键的变化:

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

于 2013-08-23T17:50:48.453 回答