0

ユーザーがファイルをアップロードし、各ファイルに特定の属性がある場合があります。多くの場合、同じ属性でデータベースにアップロードする必要があるファイルが 10 個ある可能性があります。時間を節約するために、ユーザーが 10 個のファイルすべてを選択し、データベースに 10 個のレコード (ファイルごとに 1 つのレコード) を追加できるようにすると便利です。私のモデルは以下の例に似ています:

class ContentCategory(models.Model):
    name = models.CharField(max_length=100)


class Document(models.Model):
    file_name = models.CharField(max_length=100, blank=True)
    note = models.TextField(null=True, Blank=True)
    content_category = models.ForeignKey(ContentCategory, on_delete=models.PROTECT)
    document = models.FileUpload(upload_to=f'{content_category}/')

    def save(self):
        self.file_name = os.path.basename(self.document.name)
        super(Document, self).save()

私の admin.py は、以下のコードのように単純です。

class DocumentAdmin(admin.ModelAdmin):
    exclude = ('file_name',)

admin.site.register(Document, DocumentAdmin)
admin.site.register(ContentCategory)

したがって、ここに頻繁に発生する正確なシナリオがあります。10 枚の写真をアップロードする必要があり、すべての写真が同じコンテンツ カテゴリとメモを取得します。誰かが適切なコンテンツ カテゴリを選択してメモを作成し、10 個のファイルすべてを選択してアップロードし、保存時にドキュメント テーブルに 10 個のレコードを作成できるように管理者を設定する方法はありますか? 写真ごとに1つ?

4

1 に答える 1

0

管理フォームをオーバーライドして、そこですべてのカスタム ロジックを実行できます。

Django カスタム モデル フォーム

ファイル用に 10 個のフィールドと 1 つのコンテンツ カテゴリを含むフォームを作成し、フォームを介してすべてを処理できます。

または、フォームセットを作成することもできます。

コンテンツ カテゴリを 1 つのフィールドとしてフォームを作成し、その中にすべてのファイル フィールド用のネストされたフォームセットを作成します。ユーザーは必要な数のファイルを追加でき、アップロード時に、選択したコンテンツ カテゴリを取得し、フォームセットの clean メソッドをオーバーライドして、フォームセット内の各ファイルに適用します。

于 2020-02-24T17:04:55.770 に答える