Django 将文件保存到文件夹中

1 投票
1 回答
2126 浏览
提问于 2025-04-18 13:32

我想把文件保存到一个单独的文件夹里,但这个文件夹的名字是我从表单中获取的,我现在还不知道具体是什么。不过我现在有一个可以工作的表单,它会保存到 user_(某个东西)里。

有没有人能告诉我怎么定义模型类和视图,以便获取文件夹的名字,并把我上传的文件自动保存到这个单独的文件夹里?

models.py

def content_file_name(instance, filename):
    return "user_{id}/{file}".format(id=instance, file=filename)

class Audio(models.Model):
    audiofile = models.FileField(upload_to=content_file_name)

views.py

def saved_file(request):
    # Handle file upload
    if request.method == 'POST':
        form = AudioForm(request.POST, request.FILES)
        if form.is_valid():
            newaudio = AudioForm()
            newaudio = Audio(audiofile = request.FILES['audiofile'])
            newaudio.save()

            #This is for redirect to the file save_list after post 
            return HttpResponseRedirect(reverse('app.views.saved_file'))
    else:
        form = AudioForm()

    # Load documents for the save_list page
    showfiles = Audio.objects.all()
    return render_to_response(
        'audio/file_upload.html',
        {'showfiles': showfiles, 'form': form},
        context_instance=RequestContext(request)
    )

1 个回答

0

你能把文件夹的名字放进你的模型里吗?然后再相应地修改一下 content_file_name 这个函数?

def content_file_name(instance, filename):
    return "user_{id}/{folder}/{file}".format(id=instance, folder=instance.folder_name, file=filename)

class Audio(models.Model):
    audiofile = models.FileField(upload_to=content_file_name)
    folder_name = models.CharField(max_length=1000)

撰写回答