我有一个Archetype内容,它有一个名为file的字段,它是MultiFileField(来自prototypes.multifile.MultiFileField)。架构类似于:
MultiFileField('file',
primary=True,
languageIndependent=True,
widget = MultiFileWidget(
label= "File Uploads",
show_content_type = False,))
我有一个Dexterity内容类型,它具有相同的字段名称,即file,我想创建一个脚本,从Archetype内容中提取存储的上传对象,并将其传递给Dexterity自定义内容类型。Dexterity自定义内容类型的模式为:
form.widget(file=MultiFileFieldWidget)
file = schema.List(
title=_(u"File Attachment"),
required=False,
value_type=NamedFile(),
)
我观察到,Archetype的MultiFileField将上传的对象存储为OFS Image Pdata,对于后一部分,它将存储为plone.namedfile.file.namedfile对象。有没有办法将OFS对象转换为Namedfile对象?
更新:我已经找到了解决方案,但我不确定这是否正确。
for field in prev_obj.Schema().fields():
key = field.getName()
objects_list = []
value = field.getRaw(prev_obj)
for f in value:
data = str(f['file'].data)
filename = unicode(f['filename'])
contentType = f['content_type']
fileData = NamedFile(data=data, contentType=contentType, filename=filename)
objects_list.append(fileData)
new_obj.file = copy.copy(objects_list)
首先,您可能需要使用NamedBlobFile。
那么,你有没有尝试过这样的方法来转换数据?
from plone.namedfile.file import NamedBlobFile
new_obj.file = [NamedBlobFile(str(fdata), contentType=fdata.content_type, filename=fdata.filename) for fdata in previous_obj.getFile()]
假设您同时拥有previous_obj和new_obj。