我正在创建一个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")
希望我清楚我的问题是什么,如果我说的话不清楚,请告诉我。
您可以将函数引用传递给文件字段的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)