新しいサブディレクトリへの訪問者ファイルのアップロードをDjangoする方法とディレクトリ名はセッション名である必要がありますか?

user11149657

djangoアプリケーションを作成しています。ファイルのアップロードであるモデルクラスは1つだけです。ユーザーログインおよび登録システムはありません。

私の目標は、誰かがWebページにアクセスしてファイルをアップロードすると、ディレクトリ内に新しいディレクトリが作成されるようにすること"/media"です。また、ディレクトリ名は一意である必要があり、セッション名でもある必要があります。慎重に読む:

訪問者がページにアクセスしてファイルをアップロードすると、新しいディレクトリ「A」が自動的に作成され、訪問者がページをリロードして別の新しいファイルをアップロードした場合でも、別の新しいディレクトリ「B」が作成され、そのセッションのアップロードされたファイルが保存されます。ディレクトリ「B」。

僕の model.py

from django.db import models

# Create your models here.
class ImageForExtractText(models.Model):
    image = models.FileField()

と私 form.py

from django import forms
from .models import ImageForExtractText

class UploadImage(forms.ModelForm):
    class Meta:
        model = ImageForExtractText
        fields = [
            'image',
        ]

そして view.py

from .forms import UploadImage
from django.shortcuts import render, redirect

def upload(request):
    form = UploadImage(request.POST or None, request.FILES or None)
    if form.is_valid():
        instance = form.save(commit=False)
        instance.save()
    return render(request, 'home.html', {'form': form})

と私 setting.py

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(os.path.dirname(BASE_DIR), "media")

私の問題が何であるかがはっきりしていることを願っています。私が言ったことが不明な点があれば教えてください。

Nafees Anwar

upload_toファイルフィールドの属性への関数参照を渡すことができます。この関数には動的パス(ランダムディレクトリ)が必要であり、このように自動的に作成されます。

import os
import uuid
from django.conf import settings
from django.db import models


def image_path(_, file_name):
    return os.path.join(settings.MEDIA_ROOT, str(uuid.uuid4()), file_name)


# Create your models here.
class ImageForExtractText(models.Model):
    image = models.FileField(upload_to=image_path)

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ