1

モデル:

class Model1(models.Model):
    ...
    pic1 = models.ImageField()
    pic2 = models.ImageField()

フォーム内の2つの画像を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")

フィールドのファイルはpic1MEDIA_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

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)
...
于 2013-03-11T02:43:20.773 に答える