Как загрузить файл посетителя Django в новый подкаталог, а имя каталога должно быть именем сеанса? - PullRequest
1 голос
/ 23 марта 2019

Я создаю приложение 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")

Надеюсь, я поняла, в чем заключается моя проблема, и, пожалуйста, дайте мне знать, если что-то, что я сказал, былонеясно.

1 Ответ

1 голос
/ 23 марта 2019

Вы можете передать ссылку на функцию в атрибут 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...