[Grok-dev] Values from another document before rendering
Souheil CHELFOUH
trollfot at gmail.com
Sun Jan 9 03:40:09 EST 2011
You don't need any specific extra packages :
from grokcore.component import provider
from zope.schema.interfaces import IContextSourceBinder
@provider(IContextSourceBinder)
def some_source(context):
return WHATEVER_YOU_NEED
then, in your Choice definition : source=some_source
and you're good to go
2011/1/9 Adam Summers <adamsummers1 at me.com>:
> 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
>
>
> _______________________________________________
> Grok-dev mailing list
> Grok-dev at zope.org
> https://mail.zope.org/mailman/listinfo/grok-dev
>
>
More information about the Grok-dev
mailing list