[Grok-dev] Values from another document before rendering
Kathy Manwaring
kathy at perfectnotes.com.au
Fri Feb 12 06:17:48 EST 2010
OK. I had an issue with getting a vocabulary working, back in November.
The response that you sent me (quoted below) refers to a check for
gallery_id:
if hasattr(context, 'gallery_id') and context.gallery_id is not None:
# I allways need to have the current value in my vocabulary
# or choice widgets won't render.
hasItem.append(context.gallery_id)
Presumably the call to the vocabulary includes some way of setting the
value of gallery_id - I can't get a value on my context, so I hope you can
send me the code for that bit as well!
Hopefully that is clearer - thanks for your time, Sebastian!
Kathy
> I am pretty sure I misunderstood the question...
>
> Mvh Sebastian
>>> Sebastian Ware wrote:
>>>> This is what I do. I have a field defined in an interface:
>>>>
>>>> gallery_id = schema.Choice(title=u"Gallery", vocabulary=u"Published
>>> NewProductGalleries")
>>>>
>>>> The vocabulary looks like this (it is a bit dirty, but it might
>>>> help you
>>> in the right direction):
>>>>
>>>>
>>>> import grok
>>>> from zope import schema
>>>> from zope.schema.vocabulary import SimpleVocabulary
>>>> from boardsportsource import interfaces
>>>> from boardsportsource import workflow
>>>> from hurry import query
>>>>
>>>> class NewProductGalleriesSource(grok.GlobalUtility):
>>>> grok.implements(schema.interfaces.IVocabularyFactory)
>>>> grok.name('Published NewProductGalleries')
>>>> def __call__(self, context):
>>>> terms = self.get_published_galleries(context)
>>>> return SimpleVocabulary(terms)
>>>>
>>>> def get_published_galleries(self, context):
>>>> hasItem = []
>>>> if hasattr(context, 'gallery_id') and context.gallery_id is
>>>> not
>>> None:
>>>> # I allways need to have the current value in my
>>>> vocabulary
>>>> # or choice widgets won't render.
>>>> hasItem.append(context.gallery_id)
>>>>
>>>> # I use hurry.query to find the objects I want to use in
>>>> # my vocabulary.
>>>> theQuery = query.Eq(('workflow_catalog', 'workflow_state'),
>>> workflow.PUBLISHED)
>>>> theQuery = theQuery & query.Eq(('workflow_catalog',
>>> 'object_type'), 'new_product_gallery')
>>>> dictResult = query.query.Query().searchResults(theQuery)
>>>>
>>>> theList = []
>>>> for item in dictResult:
>>>> theObj = interfaces.INewProductGallery(item)
>>>>
>>>> theList.append(SimpleVocabulary.createTerm(theObj.__name__,
>>> theObj.__name__, '%s (%s)' % (theObj.title, 'default')))
>>>> if theObj.__name__ in hasItem:
>>>> hasItem.remove(theObj.__name__)
>>>>
>>>> for key in hasItem:
>>>> # If the current value wasn't found in the search I add
>>>> it here
>>>> # with an appropriate message.
>>>> if grok.getSite()['default'].has_key(key):
>>>> theObj =
>>> interfaces.IImageOfTheDayGallery(grok.getSite()['default'][key])
>>>> theList.append(SimpleVocabulary.createTerm(key, key,
>>>> '%s
>>> (not published!)' % theObj.title))
>>>> else:
>>>> theList.append(SimpleVocabulary.createTerm(key, key,
>>>> '%s
>>> has been removed!' % key))
>>>> return theList
>>>>
>>>> Mvh Sebastian
More information about the Grok-dev
mailing list