如何将表单中的两个图像上传到django中的两个不同目录?

时间:2013-03-10 14:56:14

标签: django

模型:

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

2 个答案:

答案 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)
...