Plone/z3c.form 3.2.1- How can I make an autocomplete widget (that is not a required field) use a custom binded source object? -
i'm trying autocomplete widget render in form (z3c.form), using binded source object.
in interface class:
parent = schema.choice(title=u'a parent', source=parentsourcebinder(), required=false, default=none)
in form.form class:
fields['parent'].widgetfactory = autocompletefieldwidget
i'm using custom source binder because need pull data database.
class parentsource(object): implements(iquerysource) vocabulary = simplevocabulary([]) session = none __iter__ = vocabulary.__iter__ def __init__(self, context): self.context=context if self.session none: db_utility = queryutility(imydbutility,name="mydbutility") self.session = db_utility.session self.vocabulary = simplevocabulary([simpleterm(title='temp',value='temp',token='temp'),])
then have __contains__, getterm, gettermbytoken, search functions.
when required set false , try going load form, error: lookuperror:--novalue--, pointed gettermbytoken found in simplevocabulary in zope.schema.vocabulary.
tinkering around gettermbytoken function in zope.schema.vocabulary's simplevocabulary, able determine problem related z3c.form.browser.radio, autocompletefieldwidget use radio set.
i have 2 versions of z3c.form available, 3.0.5 , 3.2.1, default if version not set in buildout. radio.py's of both versions different. when set version in buildout.cfg 3.0.5, form renders , autocomplete widget works required set false. 3.2.1 leaves me lookuperror.
how can autocomplete widget work without needing set required true , use version 3.2.1 @ same time?
edit: i'm importing autocompletefieldwidget plone.formwidget.autocomplete. version of plone using 4.3.4.1
update found interesting radio_input.pt files of 3.0.5 , 3.2.1 line widget rendered different.
3.0.1 has:
input tal:replace="structure python:view.renderforvalue(item['value'])"
3.2.1 has:
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; ...
when replaced 3.2.1's input 3.0.5's input, widget working correctly.
Comments
Post a Comment