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")
私の問題が何であるかがはっきりしていることを願っています。私が言ったことが不明な点があれば教えてください。
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]
コメントを追加