下拉选择框实现自动搜索完成

使用plone.formwidget.autocomplete模块实现下拉选择框实现自动搜索完成

定义词汇:

@implementer(IQuerySource)
class OrgnizationSource(object):

    def __init__(self, context):
        self.context = context
        catalog = getToolByName(context, 'portal_catalog')
        self.orgs = catalog.unrestrictedSearchResults({"object_provides":IOrgnization.__identifier__})
        terms = []

        for bs in self.orgs:
            title = bs.Title
            id = bs.id
            terms.append(SimpleVocabulary.createTerm(id,id,title))
        self.vocab = SimpleVocabulary(terms)

    def __contains__(self, term):
        return self.vocab.__contains__(term)

    def __iter__(self):
        return self.vocab.__iter__()

    def __len__(self):
        return self.vocab.__len__()

    def getTerm(self, value):
        return self.vocab.getTerm(value)

    def getTermByToken(self, value):
        return self.vocab.getTermByToken(value)

    def search(self, query_string):
        q = query_string
        if isinstance(q, unicode):
            q = q.encode('utf-8').lower()
        return [self.getTerm(kw.id) for kw in self.orgs if q in kw.Title.lower()]


@implementer(IContextSourceBinder)
class OrgnizationBinder(object):

    def __call__(self, context):
        return OrgnizationSource(context)
 

定义表单:

from plone.formwidget.autocomplete import AutocompleteFieldWidget
from plone.autoform import directives
from dexterity.membrane.content.member import IMember
from zope import schema
from qyxycjh.policy.vocabulary import OrgnizationBinder
from qyxycjh.policy import _


class IOrganizationMember(IMember):
    """
    Organization Member
    """    

    
    directives.widget('orgname', AutocompleteFieldWidget)
    orgname = schema.Choice(
        title=_(u"company name"),
        description=_(u"input company name or orgnization name,will start search and find it "),
        source=OrgnizationBinder(),
        required=True)                        
  
设置