[Grok-dev] Values from another document before rendering

Adam Summers adamsummers1 at me.com
Sun Jan 9 01:16:54 EST 2011


Hi all,

Just for the benifit of someone else who gets lost, here is the answer: Sources are the way to go.

from zc.sourcefactory.basic import BasicSourceFactory 

class AccountMasterSource(BasicSourceFactory): 
        def getValues(self): 
                return grok.getSite()['AccountMaster'].values()  #Dynamically generated.

        def getTitle(self, value): 
                return value.name 

.... 


class IGLLine(interface.Interface): 
        """A GL Line""" 
        account = schema.Choice(title=u"Account", source=AccountMasterSource()) 

Also see:
http://grok.zope.org/documentation/how-to/using-sources-in-your-forms

I have a question, -- why is this page marked as outdated?

Regards,
Adam


On 8 Jan 2011, at 10:23 AM, Adam Summers wrote:

> Hi Group,
> 
> I'm using grok 1.2.1, and I have a problem calling a vocab in an addform:
> 
> My vocabulary is as follows:
> 
> class AccountMasterVocabularies(grok.GlobalUtility):
>        grok.implements(schema.interfaces.IVocabularyFactory)
>        grok.name('accnt')
> 
>        def __call__(self, context):
>                return(schema.vocabulary.SimpleVocabulary([
>                        schema.vocabulary.SimpleTerm('01', 'term 1', u'Really'),
>                        schema.vocabulary.SimpleTerm('02', 'term 2', u'Truly') ]))
> 
> (So I would expect the vocab to be registered as 'accnt', no?)
> 
> Then I have an Schema/Model as follows:
> 
> class IGLLine(interface.Interface):
>        """A Line"""
>        account = schema.Choice(title=u"Account", vocabulary='accnt')
> 
> class GLLine(grok.Model):
>        """The implementation of the GLLine"""
>        grok.context(GLLineContainer)
>        grok.implements(IGLLine)
>        account = None
> 
> However, I get a VocabularyRegistryError because the vocabulary is unknown (see below). What am I missing????
> 
> Thanks in advance,
> Adam
> 
> 
> File '/Users/adamsummers1/.buildout/eggs/grok-1.2.1-py2.6.egg/grok/publication.py', line 90 in callObject
>  return super(ZopePublicationSansProxy, self).callObject(request, ob)
> File '/Users/adamsummers1/.buildout/eggs/zope.app.publication-3.12.0-py2.6.egg/zope/app/publication/zopepublication.py', line 207 in callObject
>  return mapply(ob, request.getPositionalArguments(), request)
> <groktwotwo.app.GLLineAddForm object at 0x303d610>
> File '/Users/adamsummers1/.buildout/eggs/zope.publisher-3.12.4-py2.6.egg/zope/publisher/publish.py', line 107 in mapply
>  return debug_call(obj, args)
> File '/Users/adamsummers1/.buildout/eggs/zope.publisher-3.12.4-py2.6.egg/zope/publisher/publish.py', line 113 in debug_call
>  return obj(*args)
> File '/Users/adamsummers1/.buildout/eggs/grokcore.formlib-1.6-py2.6.egg/grokcore/formlib/components.py', line 90 in __call__
>  self.update_form()
> File '/Users/adamsummers1/.buildout/eggs/grokcore.formlib-1.6-py2.6.egg/grokcore/formlib/components.py', line 62 in update_form
>  super(GrokForm, self).update()
> File '/Users/adamsummers1/.buildout/eggs/zope.formlib-4.0.5-py2.6.egg/zope/formlib/form.py', line 758 in update
>  self.setUpWidgets()
> File '/Users/adamsummers1/.buildout/eggs/zope.formlib-4.0.5-py2.6.egg/zope/formlib/form.py', line 739 in setUpWidgets
>  form=self, adapters=self.adapters, ignore_request=ignore_request)
> File '/Users/adamsummers1/.buildout/eggs/zope.formlib-4.0.5-py2.6.egg/zope/formlib/form.py', line 266 in setUpWidgets
>  field = field.bind(context)
> File '/Users/adamsummers1/.buildout/eggs/zope.schema-3.7.0-py2.6.egg/zope/schema/_field.py', line 291 in bind
>  clone.vocabulary = vr.get(object, self.vocabularyName)
> File '/Users/adamsummers1/.buildout/eggs/zope.schema-3.7.0-py2.6.egg/zope/schema/vocabulary.py', line 166 in get
>  raise VocabularyRegistryError(name)
> VocabularyRegistryError: unknown vocabulary: 'accnt'
> 
> On 27 Nov 2009, at 4:48 PM, Kathy Manwaring wrote:
> 
>> Hi Sebastian,
>> 
>> Thank you so much for such a quick response and for including an actual
>> code example!
>> 
>> I am on a 3 day conference at the moment, but will try this out as soon as
>> I can next week.
>> 
>> Kathy
>> 
>> 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):
>>> 
> 
> _______________________________________________
> Grok-dev mailing list
> Grok-dev at zope.org
> https://mail.zope.org/mailman/listinfo/grok-dev

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.zope.org/pipermail/grok-dev/attachments/20110109/c8b0256d/attachment.html 


More information about the Grok-dev mailing list