python - 如何将文件从 FileField 复制到另一个具有不同上传路径 Django 的 FileField?
问题描述
我正在使用 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 路径。
请帮我解决这个问题。
解决方案
这是解决!更改保存功能:
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)
推荐阅读
- javascript - Safari 中的 JavaScript 问题低于 14
- php - 是否可以在 Laravel 中执行 orderBy() 或 orderBy()?
- razor-pages - 使用 asp-page TagHelper 进行表单元素操作呈现“”而不是正确的 URL
- http - 使用 ArduinoHTTPClient 通过 ESP32 发送 GET 请求时出现问题
- mysql - MySQL JSON 查询错误“字符串中缺少右引号”
- javascript - 如何在 vue3 上延迟加载图像?
- sql - 计算用户在某个日期之后给定时间范围内的记录
- airflow-scheduler - 气流:如何仅在所有重试失败时发送电子邮件警报
- ruby-on-rails - 使用涉及使用 ActiveRecord 连接表的 where 子句选择模型
- css - Tailwind CSS边框问题