@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)