[英]Django upload multiple files to dynamic subfolder
有没有办法将多个文件上传到动态子文件夹? 我需要像这样创建文件系统:
_uploads
_incident
_folder1
_file1.docx
_file2.xlsx
_folder2
_file1.docx
_file2.xlsx
_file3.xlsx
其中上传文件时定义的文件夹名称。 我设法上传了多个文件,但每次它们都保存在事件文件夹中,并且只有 1 个文件保存在子文件夹 folder1/folder2 中。 这些是我的一些代码。
模型.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>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.