私が正しく理解していれば、動的モデルフィールドは必要ありません。代わりに、プロジェクト内の画像の特定の属性を含むモデルを追加できます。
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 は良い選択肢かもしれません。