Plone / z3c.form 3.2.1-如何使自动完成窗口小部件(不是必填字段)使用自定义绑定源对象?

时间:2015-04-22 18:09:16

标签: plone z3c.form

我正在尝试使用绑定的源对象获取一个自动完成小部件以在表单(z3c.form)中呈现。

在接口类中:

Parent = schema.Choice(title=u'A Parent',
                       source=ParentSourceBinder(),
                       required=False,
                       default=None)

在我的表格中。表格类:

fields['Parent'].widgetFactory = AutocompleteFieldWidget    

我正在使用自定义源活页夹,因为我需要从数据库中提取数据。

class ParentSource(object):
    implements(IQuerySource)

    vocabulary = SimpleVocabulary([])
    session = None
    __iter__ = vocabulary.__iter__

    def __init__(self, context):
        self.context=context
        if self.session is None:
            db_utility = queryUtility(IMyDBUtility,name="MyDBUtility")
            self.session = db_utility.session
        self.vocabulary = SimpleVocabulary([SimpleTerm(title='temp',value='temp',token='temp'),])

然后我有__contains __,getTerm,getTermByToken,搜索功能。

当需要设置为false并且我尝试加载表单时,我收到一个错误:LookupError: - NOVALUE--,它指向在zope.schema.vocabulary中的SimpleVocabulary中找到的getTermByToken。

在zope.schema.vocabulary的SimpleVocabulary中使用getTermByToken函数进行修补,我能够确定问题与z3c.form.browser.radio有关,AutocompleteFieldWidget确实使用了无线电集。

我有两个版本的z3c.form可用,3.0.5和3.2.1,如果没有在buildout中设置版本,这是默认版本。两个版本的radio.py都不同。当我将buildout.cfg中的版本设置为3.0.5时,表单呈现并且自动完成小部件使用所需的设置为False。 3.2.1给我留下了LookupError。

如何在不需要将true设置为true并同时使用版本3.2.1的情况下使自动完成小部件正常工作?

编辑: 我正在从plone.formwidget.autocomplete导入AutocompleteFieldWidget。 我使用的plone版本是4.3.4.1

更新 我在3.0.5和3.2.1的radio_input.pt文件中发现了一些有趣的东西。渲染窗口小部件的行是不同的。

3.0.1有:

   input tal:replace="structure python:view.renderForValue(item['value'])"

3.2.1有:

   input id="" name="" class="" alt="" title=""
   tabindex="" disabled="" readonly="" accesskey="" value=""
   checked="" type="radio"
   tal:define="checked item/checked"
   tal:attributes="id item/id;
                   name item/name;
                   class view/klass;
                   value item/value;
                   style view/style;
                   title view/title;
                   lang view/lang;
                   ...

当我用3.0.5的输入替换3.2.1的输入时,小部件工作正常。

0 个答案:

没有答案