如何在django中使用模型实例给出文件夹名称

时间:2014-07-17 04:26:52

标签: python django

python新手。无论如何,我正在前往第一个项目。

请参阅我需要将多个文件上传到单个文件夹中,以便我想出这样的想法。

folder_name1
------myfiles1.jpg
------myfiled2.jpg
folder_name2
------mynewfiles.jpg
------mynewfiles1.jpg

我阅读了很多教程,这是我的models.py

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

class Album(models.Model):
    albumname = models.CharField(max_length=100)
    audiofile = models.FileField(upload_to=content_file_name)#documents/%Y/%m/%d

更新:这是我的view.py

def viewalbum(request):
    if request.method == 'POST':
        form = AlbumForm(request.POST, request.FILES)
        if form.is_valid():
            alubmnew = Album()
            albumvalue = Album()

            albumnew = Album(albumname = request.POST.get('albumname', None))
            albumvalue = Album(audiofile = request.FILES['audiofile'])

            #for albumvalue in request.FILES.getlist('audiofile'):
            albumvalue.save()
            albumnew.save()
            return HttpResponseRedirect(reverse('google.views.viewalbum'))
    else:
        form = AlbumForm()
    return render_to_response('audio/test.html',{'form': form}, context_instance=RequestContext(request))

我现在遇到的问题是..它没有创建albumname文件夹

而且在我的表格中,我无法一次上传多个文件。它实际上只需要上传一个文件......

3 个答案:

答案 0 :(得分:1)

import os
def content_file_name(instance, filename):   
    upload_dir = os.path.join('uploads', instance.albumname)  
    if not os.path.exists(upload_dir):
        os.makedirs(upload_dir)
    return os.path.join(upload_dir, filename)

答案 1 :(得分:0)

尝试

import os
def content_file_name(instance, filename):  
    return os.path.join('uploads/%s' % instance.albumname, filename)

这会打包albumname文件夹吗?

答案 2 :(得分:0)

您需要像这样改变视图

    albumvalue = Album()
    albumvalue.albumname = request.POST.get('albumname', None)
    albumvalue.audiofile = request.FILES['audiofile']
    albumvalue.save()

我认为Manson Hanson讲述了编写模型的正确方法。