【问题标题】:Can i upload files in one django filefield as a list of files?我可以将一个 django 文件字段中的文件作为文件列表上传吗?
【发布时间】:2021-11-28 22:43:59
【问题描述】:

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

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

【问题讨论】:

  • 请出示您的代码,这样更容易理解
  • @HarshitaJaya:没有 builtin 模型字段可以接收多个文件,如果有,那可能是糟糕的设计。通常会创建一个名为CompanyDoc 的模型,其中FileFIeldForeignKeyApplicant 模型。

标签: django django-models django-file-upload


【解决方案1】:

在撰写本文时,没有FileField 可以存储多个文件的模型。通常这是用一个额外的模型来建模的,例如CompanyDoc 有一个FileField 和一个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
    # …

有关详细信息,请参阅Uploading multiple files section of the documentation

【讨论】:

    猜你喜欢
    • 2020-02-05
    • 1970-01-01
    • 2018-09-18
    • 1970-01-01
    • 2021-02-26
    • 2011-03-12
    • 2019-11-15
    • 2017-06-20
    • 2021-07-24
    相关资源
    最近更新 更多