Django загружает несколько файлов в динамическую подпапку
Есть ли способ загрузить несколько файлов в динамический субфолдер? Мне нужно создать файловую систему следующим образом:
_uploads
_incident
_folder1
_file1.docx
_file2.xlsx
_folder2
_file1.docx
_file2.xlsx
_file3.xlsx
Где задается имя папки при загрузке файлов. Мне удается загрузить несколько файлов, но каждый раз они сохраняются в папке incident и только 1 файл сохраняется в подпапке folder1/folder2. Вот некоторые из моих кодов
Models.py
from django.db import models
#Create your models here.
def form_directory_path(instance,filename):
# file will be uploaded to MEDIA_ROOT/<folder_name>/<filename>
return 'incidents/{0}/{1}'.format(instance.folder_name, filename)
class UploadFiles(models.Model):
folder_name = models.CharField(max_length=40,unique=True)
files = models.FileField(upload_to=form_directory_path)
date = models.DateField(auto_now_add=True, blank=True, null=True)
def __str__(self):
return f'{self.folder_name} ({self.date})'
Forms.py
from django import forms
from .models import UploadFiles
# class FileFieldForm(forms.Form):
# file_field = forms.FileField(widget=forms.ClearableFileInput(attrs={'multiple': True}))
class FileFieldForm(forms.ModelForm):
class Meta:
model = UploadFiles
fields = '__all__'
widgets = {
'files': forms.ClearableFileInput(attrs={'multiple': True}),
}
Виды
from django.shortcuts import render
from django.views.generic.edit import FormView
from .forms import FileFieldForm
from .models import UploadFiles
class FileFieldFormView(FormView):
form_class = FileFieldForm
template_name = 'upload_files_app/upload.html' # Replace with your template.
success_url = 'thankYou/' # Replace with your URL or reverse().
def post(self, request, *args, **kwargs):
form_class = self.get_form_class()
form = self.get_form(form_class)
files = request.FILES.getlist('files')
if form.is_valid():
form.save()
for f in files:
file_instance = UploadFiles(files=f) # Do something with each file.
file_instance.save()
return self.form_valid(form)
else:
return self.form_invalid(form)
HTML файл
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Incident declaration</title>
</head>
<body>
<form action="" method="POST" enctype="multipart/form-data">
{% csrf_token %} {{ form.as_p }}
<button type="submit">Upload</button>
</form>
</body>
Я не уверен, но у меня тот же вопрос, спасибо за ваш пост