模型:
class Model1(models.Model):
...
pic1 = models.ImageField()
pic2 = models.ImageField()
如何将表格中的两张图片上传到django的2个不同目录?例如,MEDIA_ROOT / pic1 /中的pic1和MEDIA_ROOT / pic2中的pic2 /?
我已经阅读了django文档,但我找不到FileField的upload_to参数的答案。
更新:很抱歉提及,将图像上传到2个不同的目录时,如何重命名? pic1将保存到MEDIA_ROOT / pic1 / year-month-day-original_name.jpg,pic2将保存到MEDIA_ROOT / pic2 / year-month-day-original_name.jpg
答案 0 :(得分:1)
我想我一定误解了你的问题。当然,这正是你所描述的 -
class Model1(models.Model):
...
pic1 = models.ImageField(upload_to="pic1")
pic2 = models.ImageField(upload_to="pic2")
pic1
字段中的文件将上传到MEDIA_ROOT / pic1 /,pic2
字段中的文件将上传到MEDIA_ROOT / pic2 /。
更新
看看upload_to参数上的docs - 你可以传递一个函数来动态创建路径,如Catherines的回答所述。
我知道这不是你的计划,但如果你想要一些非常简单的东西来组织你的文件,那么值得注意的是你也可以在upload_to
参数中使用strftime表示法。
pic1 = models.ImageField(upload_to='pic1/%Y/%m/%d')
这会给你一条路径 - /path/to/media_root/pic1/2013/03/11/filename.jpg
答案 1 :(得分:1)
models.py
def get_pic1_path(instance, filename):
return new_path(path="pic1", filename)
def get_pic2_path(instance, filename):
return new_path(path="pic2", filename)
def new_path(path, filename):
today = date.now()
today_path = today.strftime("%Y-%m-%d")
image_path = "{0}-{1}".format(today_path, filename)
return os.path.join(path, image_path)
class Model1(models.Model):
...
pic1 = models.CustomImageField(upload_to=get_pic1_path)
pic2 = models.ImageField(upload_to=get_pic2_path)
<强> views.py 强>
...
if request.method == 'POST':
form = Model1Form(request.POST, request.FILES)
if form.is_valid():
image = Model1.objects.create()
pic1 = request.FILES['pic1']
pic2 = request.FILES['pic2']
image.pic1.save(pic1.name, image_file)
image.pic2.save(pic2.name, image_file)
...