在Django中使用上传文件的动态目标文件夹

dji*_*ril 1 django file-upload

我想动态创建上传文件的目的地.但是,似乎'upload_to'选项仅适用于模型,而不适用于表单.所以下面的代码是错误的.

class MyForm(forms.Form):

     fichier = forms.FileField(**upload_to='files/%m-%Y/'**)
Run Code Online (Sandbox Code Playgroud)

在处理上载文件的视图中,目标是静态的.我怎样才能让它变得动态?

谢谢.

zal*_*lew 5

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)
Run Code Online (Sandbox Code Playgroud)

评论后编辑

def handle_uploaded_file(file):
    # generate dynamic path
    # save file to that path
Run Code Online (Sandbox Code Playgroud)

这里的例子http://docs.djangoproject.com/en/dev/topics/http/file-uploads/#handling-uploaded-files

如果来自model的表单,则覆盖save()方法

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()
Run Code Online (Sandbox Code Playgroud)

如果不是来自模型的表单,请在视图中调用上传处理程序

def your_view(request):
    #####
    if form.is_valid():
        file = handle_uploaded_file(form.cleaned_data['fichier'])
Run Code Online (Sandbox Code Playgroud)