为Django中上载的文件使用动态目标文件夹

为Django中上载的文件使用动态目标文件夹,django,file-upload,Django,File Upload,我想动态创建上传文件的目标。 但是,“上传到”选项似乎只适用于模型,而不适用于表单。所以下面的代码是错误的 类MyForm(forms.Form): 在处理上传文件的视图中,目标是静态的。我怎样才能使它充满活力 谢谢。请提供一个可调用的函数名,即获取模型实例的函数名和字符串,并返回所需的名称,而不是字符串。有关详细信息,请参阅。有一件事他们没有说(至少我在文档中找不到),那就是如果返回的文件名以“/”开头,那么它就是一个绝对路径,否则它是相对于您的/media目录的。提供一个可调用的名称,而不是

我想动态创建上传文件的目标。 但是,“上传到”选项似乎只适用于模型,而不适用于表单。所以下面的代码是错误的

类MyForm(forms.Form):

在处理上传文件的视图中,目标是静态的。我怎样才能使它充满活力


谢谢。

请提供一个可调用的函数名,即获取模型实例的函数名和字符串,并返回所需的名称,而不是字符串。有关详细信息,请参阅。有一件事他们没有说(至少我在文档中找不到),那就是如果返回的文件名以“/”开头,那么它就是一个绝对路径,否则它是相对于您的/media目录的。

提供一个可调用的名称,而不是一个字符串,即获取模型实例的函数名和一个字符串,并返回所需的名称。有关详细信息,请参阅。他们没有说(至少我在文档中找不到)如果返回的文件名以“/”开头,那么它是一个绝对路径,否则它是相对于/media目录的

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)
评论后编辑

这里的例子

如果表单来自模型,请重写save()方法

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

def your_view(request):
    #####
    if form.is_valid():
        file = handle_uploaded_file(form.cleaned_data['fichier'])
评论后编辑

这里的例子

如果表单来自模型,请重写save()方法

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

def your_view(request):
    #####
    if form.is_valid():
        file = handle_uploaded_file(form.cleaned_data['fichier'])

我没有使用模型。。。我用的是表格。更新了。如果这不是你要找的,请提供一些详细信息问题出在哪里。这是ctrV抱歉。其余的都没问题我没用模型。。。我用的是表格。更新了。如果这不是你要找的,请提供一些详细信息问题出在哪里。这是ctrV抱歉。其余的都还可以
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()
def your_view(request):
    #####
    if form.is_valid():
        file = handle_uploaded_file(form.cleaned_data['fichier'])