Могу ли я загрузить файлы в одно файловое поле 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
# …
Для получения дополнительной информации смотрите раздел "Загрузка нескольких файлов" документации.