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>

Я не уверен, но у меня тот же вопрос, спасибо за ваш пост

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