我正在创建Django应用程序。它只有一个模型类,即文件上传。它没有用户登录和注册系统。
我的目标是做到这一点,以便当有人访问该网页并上传文件时,它会在"/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")
希望我对我的问题很清楚,如果我所说的不清楚,请告诉我。
答案 0 :(得分:1)
您可以将函数引用传递到文件字段的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)