1

一連の画像を表示する Djano アプリケーションと、特定の画像特性を記録するための各画像のフォームを構築しています。ユーザーは「プロジェクト」を初期化し、そこで評価のために表示される一連の画像を指定します。プロジェクトの初期化時に、ユーザーがカスタム ブール フィールド (つまり、一連のチェックボックス) を追加できるようにしたいのですが、データベース モデルを構築する方法がわかりません。

たとえば、ユーザーは評価のためmy_projectimage_A.pngimage_B.pngおよびで初期化する場合があります。image_C.png画像ごとに得られるデフォルトのフォームでは、PASS、FAIL、UNKNOWN のいずれかを選択できます。「トリミングが不十分」、「露出オーバー」、「ぼやけ」などのカスタム フィールドを追加したい場合があります (画像はグローバル PASS である可能性がありますが、この画像セットのコンテキストに固有の小さな失敗はまだ可能性があります)。記録されます)。

一般的に、私は 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 に答える