【问题标题】:How to copy file from FileField to another FileField with different upload path Django?如何将文件从 FileField 复制到另一个具有不同上传路径 Django 的 FileField?
【发布时间】:2021-10-29 06:58:43
【问题描述】:

我正在使用 Django 建立一个网站,我正在使用两个 FileField 一个供用户上传文档,另一个系统将获取文档以保存它的备份。

My Model

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,
    )

My save view function

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 路径。

请帮我解决这个问题。

【问题讨论】:

  • “不起作用”是什么意思?
  • 它只是给attachment_copy 字段提供了attachment_number 的路径。

标签: python django


【解决方案1】:

解决了! 更改保存功能:

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)

【讨论】:

    猜你喜欢
    • 2019-10-03
    • 1970-01-01
    • 1970-01-01
    • 2010-10-25
    • 1970-01-01
    • 2023-04-11
    • 1970-01-01
    • 2021-05-21
    • 2011-08-15
    相关资源
    最近更新 更多