Добавление объекта 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.

Эти действия подробно описаны в жизненном цикле строительства объекта. Возможно, некоторые из этих действий необходимы для создания нужной вам базы данных (я надеюсь, что это индекс).

Другие вопросы по тегам