[Zope3-Users] Implementing a DropdownWidget for a country-code vocabulary

Jesper Petersen instantfoo at gmail.com
Mon Sep 17 07:37:44 EDT 2007


On 9/17/07, Hermann Himmelbauer <dusty at qwer.tk> wrote:
>
> Am Samstag, 15. September 2007 18:08 schrieb Jesper Petersen:
> > Hello!I'm trying to implement a DropdownWidget for my country list. In
> my
> > app i'd like to have a dropdown menu where a user can choose a country
> (for
> > my main content object, a job). My vocabulary is created from a list of
> > strings, and stored in a local utility:
> >
> >
> > SimpleVocabulary.fromValues( [u'AD', u'AE', 'AF', ...] )
> >
> >
> > But in my dropdown widget i want to display the country name for each
> > option too.. and not just the same value on both the value attribute and
> > inside the element:
> >
> > <option value="AD">Andorra</option>
>
> Perhaps I misunderstand your question, but AFAIK vocabulary support this
> scenario. In my application, I also have a country drop-down that is in my
> case filled from a relational database. The vocabulary looks like this:
>
> def landVocabulary(obj):
>    """Get ktoids and ktonrs from session"""
>    session = zalchemy.getSession()
>    laender = session.query(Land)
>    laender_terms = []
>    for n, land in enumerate(laender):
>        laender_terms.append(vocabulary.SimpleVocabulary.\
>                         createTerm(land.landid,
>                                    n,
>                                    land.name))
>    return vocabulary.SimpleVocabulary(laender_terms)
>
> # Make function a vocabulary factory
> alsoProvides(landVocabulary, IVocabularyFactory)
>
> and in my configuration:
>
>    <utility
>        component=".utils.landVocabulary"
>        name="landVocabulary"
>        />
>
> Now I can use this vocabulary from any interface.
>
> Best regards,
> Hermann
>

Hello Hermann!Since the country names depend on the locale I don't want to
save the countryname on my object, only the country code. Hence, my utility
contains only country codes, ['AD', 'AF', ...].

If, in my DropdownWidget, I provide a vocabulary on the form [('AD',
'Andorra'), ('Af', 'Afghanistan'), ...] instead of the one in my utility,
the constraint will obviously fail when the form is submitted ('AD' does not
equal ('AD,'Andorra)).

In my case you can say that the countrynames are "dynamic" and merealy a UI
thing, whereas in your app you are retrieving a constant list of
countrynames, right?
Perhaps this should remove any misunderstandings you might have about my
earlier post. (This problem _can_ be solved with z3c.widget but it'd be nice
to get this working on my own)

My current solution is a quick hack: I save a list in
DropdownWidget.territories on the form [('AD', 'Andorra'), ('Af',
'Afghanistan'), ...] and then tal:repeat over it setting the <option>-value
attribute to countrycode and put countryname inside <option>..</option>.

Regards
/Jesper
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.zope.org/pipermail/zope3-users/attachments/20070917/cb3040ea/attachment.htm


More information about the Zope3-users mailing list