如何在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
试试看
import os
def content_file_name(instance, filename):
return os.path.join('uploads/%s' % instance.albumname, filename)
这会创建一个以专辑名称命名的文件夹吗?
1
当然可以!请看下面的内容:
在编程中,有时候我们需要让程序做一些重复的事情,比如计算、处理数据或者显示信息。为了让这些重复的操作变得简单,我们可以使用“循环”。循环就像是一个指令,让程序不断地执行同样的任务,直到满足某个条件为止。
比如说,如果你想让程序打印数字1到10,你可以用循环来实现,而不是一个个写出每个数字。这样不仅节省时间,还能让代码看起来更整洁。
另外,循环有几种不同的类型,比如“for循环”和“while循环”。“for循环”通常用于知道要重复多少次的情况,而“while循环”则是在不知道具体次数的情况下使用,直到某个条件不再满足为止。
总之,循环是编程中非常重要的一个概念,它能帮助我们更高效地完成任务。
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)
0
你需要像这样修改视图
albumvalue = Album()
albumvalue.albumname = request.POST.get('albumname', None)
albumvalue.audiofile = request.FILES['audiofile']
albumvalue.save()
我觉得Manson Hanson说的写模型的方法是对的。