如何将Django访问者文件上传到新的子目录和目录名称应该是会话名称?

问题描述 投票:1回答:1

我正在创建一个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")

希望我清楚我的问题是什么,如果我说的话不清楚,请告诉我。

django
1个回答
0
投票

您可以将函数引用传递给文件字段的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)
© www.soinside.com 2019 - 2024. All rights reserved.