在Django中使用上传文件的动态目标文件夹 [英] USe dynamic destination folder for uploaded file in Django
问题描述
但是,似乎'upload_to'选项只适用于模型,不适用于表单。所以下面的代码是错误的。
$ b
class MyForm(forms.Form):
fichier = forms.FileField(** upload_to ='files /%m-%Y /'**)
在处理上传文件的视图中,目标是静态的。
谢谢。
<$ p $ self_id(self,name):
name = do_sth_with_name(name)
folder = generate_folder_name(self.id, self.whatever_field)
return'uploads /'+ folder +'/'+ name
file = models.FileField(upload_to = upload_path)
编辑后的评论
def handle_uploaded_file(file):
#生成动态路径
#将文件保存到该路径
示例这里 http:/ /docs.djangoproject.com/en/dev/topics/http/file-uploads/#handling-uploaded-files
如果从模型形式,覆盖save()方法
class YourForm(forms.ModelForm):
fichier = forms.FileField()
def save(self):
如果self.cleaned_data ['fichier']:
file = handle_uploaded_file(self.cleaned_data ['fichier'])$ b如果不是从模型中形成的话,$ b super(YourForm,self).save()
处理程序在您的意见
def your_view(请求):
#####
if form。 is_valid():
file = handle_uploaded_file(form.cleaned_data ['fichier'])
I would like to create dynamically the destination of my uploaded files. But, it seems that the 'upload_to' option is only available for a models, not for forms. So the following code is wrong.
class MyForm(forms.Form):
fichier = forms.FileField(**upload_to='files/%m-%Y/'**)
In the view handling the uploaded file, the destination is static. How can I make it dynamic ?
Thank you.
class YourFileModel(models.Model)
def upload_path(self, name):
name = do_sth_with_name(name)
folder = generate_folder_name(self.id, self.whatever_field)
return 'uploads/' + folder + '/' + name
file = models.FileField(upload_to=upload_path)
edit after comment
def handle_uploaded_file(file):
# generate dynamic path
# save file to that path
example here http://docs.djangoproject.com/en/dev/topics/http/file-uploads/#handling-uploaded-files
if form from model, override the save() method
class YourForm(forms.ModelForm):
fichier = forms.FileField()
def save(self):
if self.cleaned_data['fichier']:
file = handle_uploaded_file(self.cleaned_data['fichier'])
super(YourForm, self).save()
if not form from model, call the upload handler in your view
def your_view(request):
#####
if form.is_valid():
file = handle_uploaded_file(form.cleaned_data['fichier'])
这篇关于在Django中使用上传文件的动态目标文件夹的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!