Как создать новый upload_to для папки FileField из views.py
в models.py,
class Files(models.Model):
File = models.FileField(upload_to="documents/")
в моем views.py все работает отлично, когда я удаляю 3-ю строку
file = Files(File=f)
file.File.upload_to('Media/')
file.save()
Вопрос есть.
Я хочу создать новую upload_to
папку только из views.py. это вообще ВОЗМОЖНО?
Я знаю метод создания папки с помощью функции экземпляра, используемый в models.py, я не хочу его использовать
Вы можете задать имя файла, и таким образом работать с:
from django.conf import settings
from os.path import join as pathjoin
file = Files(File=f)
old_path = car.photo.path
file.File.name = f'Media/{file.File.name}'
new_path = pathjoin(settings.MEDIA_ROOT, file.File.name)
rename(path, new_path)
file.save()
Таким образом, сначала мы создаем объект Files
с f
в качестве File
, затем проверяем путь, создаем новое имя, а затем перемещаем файл в новый каталог и обновляем объект Files
в базе данных.
Вы можете сделать это массово, перечислив все элементы Files
и установить файл, как описано в ответе. Вместо сохранения объекта напрямую, вы можете собрать их в список и выполнить .bulk_update(…)
[Django-doc]:
from django.conf import settings
from os.path import join as pathjoin
files = list(Files.objects.all())
for file in files:
old_path = car.photo.path
file.File.name = f'Media/{file.File.name}'
new_path = pathjoin(settings.MEDIA_ROOT, file.File.name)
rename(path, new_path)
Files.objects.bulk_update(files, ['File'])