NamedImageFieldWidget不呈现图像

时间:2015-08-07 14:30:26

标签: widget plone z3c.form

我有一个像这样的z3c表单,它不是灵巧的内容类型:

from zope import schema
from plone.directives import form
from bsw.adel import personne
from plone.namedfile.field import NamedImage
from plone import namedfile
from plone.formwidget.namedfile import NamedImageFieldWidget

def get_portrait():
    login = api.user.get_current().id
    adel_personne = personne.Personne()
    ma_personne = adel_personne.get(id_personne=None,
                                    login=login)
    if ma_personne is not None:
        data = adel_personne.get_picture(id_personne=ma_personne.idPersonne,
                                         photo_filename=None,
                                     mode='v'
                                     )
        return namedfile.NamedImage(data=base64.b64decode(data), filename=u'portrait.jpg')

class ISouscripteur(form.Schema):
    """
    Souscripteur Schema
    """
    form.widget(portrait=NamedImageFieldWidget)
    portrait = NamedImage(
        title=_(u"Portrait"),
        required=False,
        defaultFactory=get_portrait
    )

我可以上传一张有效的图片。 但是当我加载表单并获取肖像时,我只看到一个空输入文件。 数据来自外部Web服务。

我已经测试过编写updateWidgets方法来使用NamedImage(according to the doc)更新窗口小部件值,但结果是一样的。

使用调试器,我发现widget值仍然有一个NamedImage,updateWidgets方法只是替换它。

我是否遗漏了这个小部件中的图像和单选按钮?

1 个答案:

答案 0 :(得分:1)

您需要的是一个计算字段,根据plone.directives.form文档,z3c.form具有value adapter的概念,这是一个可以为属性提供值的组件。

以下是使用第一个设置带有默认值的标题字段的示例;尝试为你的用例修改它。

public class ListenerClass implements Listener {
    public ListenerClass() {
        Plugin main = MainClass.getInstance();
        main.getServer().getPluginManager().registerEvents(this, main);
    }
}