Могу ли я загрузить файлы в одно файловое поле django в виде списка файлов?

Я создал веб-страницу, на которой кандидат может подать заявку на работу. Там они могут перечислить различный предыдущий опыт. Я обрабатываю все сведения об опыте путем конкатенации в моих моделях и разбиваю их при получении. как мне следует обрабатывать файлы в таком случае?

В моей модели Applicant есть поле FileField под названием company_doc. Может ли оно также каким-то образом принимать несколько файлов, чтобы я мог получить их с помощью индексации? Возможно ли это?

На момент написания статьи не существует FileField для модели, которая может хранить несколько файлов. Обычно это моделируется с помощью дополнительной модели, например CompanyDoc, которая имеет FileField и ForeignKey к модели Applicant, так:

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
    # …

Для получения дополнительной информации смотрите раздел "Загрузка нескольких файлов" документации.

Вернуться на верх