0

我有一个用户上传文件并且每个文件都有某些属性的案例。通常可能有 10 个文件需要上传到具有相同属性的数据库中。为了节省时间,最好允许用户选择所有 10 个文件并在数据库中添加 10 条记录,每个文件一条记录。我的模型类似于下面的示例:

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 条记录?每张照片一张?

4

1 回答 1

0

您可以覆盖您的管理表单,然后在那里执行所有自定义逻辑。

Django 自定义模型表单

您可以创建一个包含 10 个文件字段和 1 个内容类别的表单,然后通过表单处理所有内容。

或者,您也可以创建一个表单集

我将创建一个内容类别为 1 字段的表单,并在其中为所有文件字段创建一个嵌套表单集。用户可以根据需要添加任意数量的文件,当他们上传时,获取他们选择的内容类别,并通过覆盖 formset clean 方法将其应用到 f​​ormset 中的每个文件。

于 2020-02-24T17:04:55.770 回答