Как скопировать файл из 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)
Вернуться на верх