我正在尝试构建一个django命令来上传文件并为它们创建关联的页面。
我的文档是PDF文件,我的问题是自动将这些文件“上传”到正确的目标“媒体”目录中,而不使用我的命令脚本从“文档存储库”显式复制到MEDIA_ROOT
定义目录。
我尝试使用:
代码
f = File(open(file_path, 'r'))
# models.OfficeDocument is an inheritor of BaseDocument class
new_document, created = models.OfficeDocument.objects.get_or_create(title=title,
collection=collection,
file=f)
错误
SuspiciousFileOperation: The joined path (<my_local_path>) is located outside of the base path component (<MEDIA_ROOT path>)
但是w w说我不在正确的目录中(不在MEDIA_ROOT
)
我该怎么做?
答案 0 :(得分:0)
您正尝试将文档及其文件保存在当前位置,而不是先将其复制到新位置。你可以添加一些代码来将文件复制到正确的位置,或者模仿Wagtail documents add view在这里做什么似乎是合理的 - 实例化一个模型,清理它并调用它的save方法。这将处理文档的保存,因为它在文件字段上配置了upload_to
属性。
尝试:
from wagtail.wagtailcore.models import get_root_collection_id
collection = get_root_collecion_id()
user = some_user_you_will_attribute_these_to
doc = Document(uploaded_by_user=user)
upload_dict = {
'title': some_title,
'file': f,
'collection': collection,
'tags': '',
}
form = DocumentForm(upload_dict, f, instance=doc, user=request.user)
if form.is_valid():
form.save()
您可能会发现文件对象需要类似于包装的Django UploadedFile实例,请参阅https://docs.djangoproject.com/en/1.11/ref/files/uploads/