Как скопировать файл из FileField в другое FileField с другим путем загрузки Django?
Я использую Django для создания веб-сайта и использую два поля FileField, одно из которых предназначено для загрузки документа пользователем, а другое - для сохранения его резервной копии.
Моя модель
def file_path_dir(instance, filename):
return "File/{0}/{1}".format("File" + datetime.now().strftime("%Y.%m.%d"), filename)
def file_path_dir_copy(instance, filename):
return "FileBackUp/{0}/{1}".format("FileBackUp" + datetime.now().strftime("%Y.%m.%d"), filename)
class MyModal(models.Model)
UPLOAD_ROOT = "C:/"
UPLOAD_COPY = "C:/"
upload_storage = FileSystemStorage(location=UPLOAD_ROOT, base_url="/uploads")
upload_storage_copy = FileSystemStorage(location=UPLOAD_COPY, base_url="/uploads")
attachment_number = models.FileField(
verbose_name=_("Attachment"),
upload_to=file_path_dir,
storage=upload_storage,
blank=True,
null=True,
)
attachment_copy = models.FileField(
verbose_name=_("Backup Attachment"),
upload_to=file_path_dir_copy,
storage=upload_storage_copy,
blank=True,
null=True,
)
Моя функция сохранения вида
def save_model(self,request,obj,*args,**kwargs):
print(obj)
for sub_obj in obj:
path = sub_obj.file_path_dir_copy(sub_obj.attachment_number.name)
sub_obj.attachment_copy=path
return super(AttachmentFormsetView,self).save_model(request,obj,*args,**kwargs)
Я использовал приведенный выше код, но он не работает.
Просто передайте attachment_copy путь к полю attachment_number.
Также я хочу загрузить файл по пути attachment_copy upload_to.
Пожалуйста, помогите мне решить эту проблему.
это решено! изменение в вашей функции сохранения:
def save_model(self,request,obj,*args,**kwargs):
from django.core.files.storage import FileSystemStorage
for sub_obj in obj:
fs = FileSystemStorage(location= "C:/FileBackup/{0}".format("FileBackup" + datetime.now().strftime("%Y.%m.%d")),base_url="/uploads")
filename = fs.save(sub_obj.attachment_number.name, sub_obj.attachment_number)
file_url = fs.url(filename)
path = sub_obj.file_path_dir_copy(sub_obj.attachment_number.name)
sub_obj.attachment_copy=path
return super(AttachmentFormsetView,self).save_model(request,obj,*args,**kwargs)