1

模型:

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

4

2 回答 2

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 参数的文档- 您可以将其传递给动态创建路径的函数,如 Catherines 回答中所述。

我知道这不是您的计划,但是如果您想要一些超级简单的东西来组织您的文件,那么值得注意的是您还可以在参数中使用strftime表示法。upload_to

pic1 = models.ImageField(upload_to='pic1/%Y/%m/%d')

这会给你一个像 -/path/to/media_root/pic1/2013/03/11/filename.jpg

于 2013-03-10T16:12:19.217 回答
1

模型.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)

视图.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)
...
于 2013-03-11T02:43:20.773 回答