Добавление объекта File программно в Plone с использованием PloneFormGen
Я пишу адаптер настраиваемого действия PloneFormGen, чтобы добавить объект File в папку из поля File в форме. Вот сценарий:
target = context.filefolder
form = request.form
uid = str(DateTime().millis())
target.invokeFactory("File", id=uid, file=form['arquivo-do-cv_file'])
obj = target[uid]
"filefolder" - это имя папки внутри родительской папки для PFG FormFolder. Этот сценарий настроен для запуска с ролью прокси-менеджера.
Проблема в том, что объекты File, созданные таким образом, не будут отображать ссылку "Нажмите здесь, чтобы загрузить файл", когда я их просматриваю. Файлы могут быть загружены, хотя, если я подавлю часть "/view" в конце URL. Чего мне не хватает при вызове invokeFactory для создания объекта File?
ОБНОВЛЕНИЕ: Я имел в виду, что у меня нет ссылки " имя файла - тип файла, размер в килобайтах (размер в байтах) " для документа ниже подписи автора. Когда я создаю объект File, используя обычный пользовательский интерфейс Plone, он появляется.
2 ответа
Я ничего не подозреваю; Я думаю, что это поведение по умолчанию в Plone 4.
Я только что добавил файл и не вижу "Нажмите здесь, чтобы загрузить файл".
И быстрый поиск не показывает строку "нажмите здесь, чтобы скачать":
aclark@Alex-Clarks-MacBook-Pro:~/Developer/test-4.1/ > grep -ir "Click here to download" parts/omelette
parts/omelette/plone/app/jquerytools/browser/jquery.tools.plugins.js: (root.tagName == 'A' ? "<p>Click here to download latest version</p>" :
parts/omelette/plone/app/jquerytools/browser/jquery.tools.plugins.min.js:" or greater is required</h2><h3>"+(g[0]>0?"Your version is "+g:"You have no flash plugin installed")+"</h3>"+(a.tagName=="A"?"<p>Click here to download latest version</p>":"<p>Download latest version from <a href='"+k+"'>here</a></p>");if(a.tagName=="A")a.onclick=function(){location.href=k}}if(b.onFail){var d=b.onFail.call(this);if(typeof d=="string")a.innerHTML=d}}if(i)window[b.id]=document.getElementById(b.id);f(this,{getRoot:function(){return a},getOptions:function(){return b},getConf:function(){return c},
У меня нет экземпляра Plone, чтобы проверить его, но попробуйте позвонить processForm()
после invokeFactory
, Будет:
- снять флажок создания;
- переименовать объект в соответствии с заголовком;
- переиндексировать объект;
- вызовите сценарий after_creation и запустите событие ObjectInitialized.
Эти действия подробно описаны в жизненном цикле строительства объекта. Возможно, некоторые из этих действий необходимы для создания нужной вам базы данных (я надеюсь, что это индекс).