У меня есть содержимое Archetype, в котором есть поле с именем file, и это MultiFileField (из archetypes.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(),
)
Я заметил, что MultiFileField Archetype сохраняет загруженный объект как 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)