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

Popular posts from this blog

c++ - No viable overloaded operator for references a map -

java - Custom OutputStreamAppender not run: LOGBACK: No context given for <MYAPPENDER> -

java - Cannot secure connection using TLS -