在Django中使用上传文件的动态目标文件夹 [英] USe dynamic destination folder for uploaded file in Django

查看:768
本文介绍了在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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆