所以我阅读了文档,我有点困惑。我有一个这样的模型
class Image(models.Model):
name = models.CharField(max_length=80)
file = models.ImageField(upload_to = 'project_images')
description = models.CharField(max_length=30)
def __unicode__(self):
return self.name
文件上传的处理是通过管理界面完成的,管理界面有效但我需要根据提交上传时存在的其他字段对数据做更多的事情。
基本上当前目录是project_images
我想要做的是保存图像时必须放在---&gt; project_images/<year>/<month>
。保存的文件路径在保存在数据库中时必须反映这一点,文件名也必须保存在名称字段中。
我理解这背后的逻辑;
我应该在哪里指明这个?在保存方法下的模型中?
很抱歉,如果在文档中指定了这个,但这是文档的一个区域,这让我很困惑。
由于
答案 0 :(得分:1)
from django.db import models
import datetime
import os
import uuid
# Create your models here.
def get_file_path(instance,filename):
ext=filename.split('.')[-1]
filename="%s.%s" % (uuid.uuid4(),ext)
return os.path.join(instance.directory_string_var,filename)
class Image(models.Model):
file=models.ImageField(upload_to=get_file_path)
now=datetime.datetime.now()
directory_string_var = 'image/%s/%s/%s/'%(now.year,now.month,now.day)
将您的模型更改为高于一。
这会在媒体/年/月/日文件夹中使用随机名称保存文件。
如果你不希望文件名是随机的,只需注释掉
ext = filename.split('.')[-1] #and
filename="%s.%s" % (uuid.uuid4(),ext)
答案 1 :(得分:0)
检查一下:
how to create year/month/day structure when uploading files with django
所以在你的模型中,你可以这样做:
class Image(models.Model):
name = models.CharField(max_length=80)
file = models.ImageField(upload_to = 'project_images/%Y/%m')
description = models.CharField(max_length=30)
def __unicode__(self):
return self.name
upload_to的'%Y /%m'部分是strftime格式; '%Y'是四位数年份,'%m'是两位数月份
您必须将其检查为:
http://scottbarnham.com/blog/2007/07/31/uploading-images-to-a-dynamic-path-with-django/
我希望这有帮助