首页 > 解决方案 > 我可以将一个 django 文件字段中的文件作为文件列表上传吗?

问题描述

我创建了一个网页,候选人可以在其中申请工作。在那里,他们可以列出不同的以往经历。我通过在我的模型中连接它们并在获取时拆分它们来处理所有体验细节。在这种情况下我应该如何处理文件?

我的申请人模型有一个名为 company_doc 的文件字段。它还可以以某种方式获取多个文件,以便我可以通过一些索引检索它们吗?那可能吗?

标签: djangodjango-modelsdjango-file-upload

解决方案


在撰写本文时,没有FileField可以存储多个文件的模型。通常这是用一个额外的模型来建模的,例如模型CompanyDoc有 aFileField和 a ,所以:ForeignKeyApplicant

class Applicant(models.Model):
    # …
    pass

class CompanyDoc(models.Model):
    applicant = models.ForeignKey(
        Applicant, on_delete=models.CASCADE
    )
    file = models.FileField(upload_to='company_doc/')

然后,您可以构建一个可以上传多个文件的表单:

from django import forms

class CompanyDocsForm(forms.Form):
    files = forms.FileField(
        widget=forms.ClearableFileInput(attrs={'multiple': True})
    )

然后处理这个:

def some_view(request, applicant_id):
    if request.method == 'POST':
        form = CompanyDocForm(request.POST, request.FILES)
        if form.is_valid():
            data = [
                CompanyDoc(file=file, applicant_id=applicant_id)
                for file in request.FILES.getlist('files')
            ]
            CompanyDoc.objects.bulk_create(data)
        else:
            # …
            pass
    else:
        # …
        pass
    # …

有关详细信息,请参阅文档的上传多个文件部分


推荐阅读