NamedImageFieldWidget не отображает изображение

У меня есть такая форма 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
    )

Я могу загрузить изображение, которое работает. Но когда я загружаю форму и получаю портрет, я просто вижу пустой входной файл. Данные поступают из внешнего веб-сервиса.

Я пробовал написать метод updateWidgets для обновления значения виджета с помощью NamedImage (согласно документу), но результат тот же.

С помощью отладчика я обнаружил, что значение виджета по-прежнему содержит NamedImage, метод updateWidgets просто заменяет его.

Есть ли что-то, что я пропустил, чтобы показать изображение и переключатели в этом виджете?


person Jihaisse    schedule 07.08.2015    source источник


Ответы (1)


Вам нужно вычисляемое поле и, согласно документации plone.directives.form , z3c.form имеет концепцию адаптера значения, компонента, который может предоставить значение для атрибута.

Ниже приведен пример установки поля заголовка со значением по умолчанию с использованием первого; попробуйте изменить его для вашего варианта использования.

from plone.directives import form
from zope import schema

class IMySchema(form.Schema):

    title = schema.TextLine(title=u"Title")

@form.default_value(field=IMySchema['title'])
def default_title(data):
    return data.context.suggested_title
person hvelarde    schedule 07.08.2015
comment
Я должен был упомянуть, что это не тип контента ловкости. Это форма, которая получает данные из веб-сервиса. - person Jihaisse; 10.08.2015