Thanks so much for the response. Unfortunately, it didn't add the 'selected' attribute to the select option.
I tried the following as well, since you had a good point about value types and making sure they were strings... return [(c <http://c.id/>.name, c.name) for c in all_categories] And then, categories = colander.SchemaNode( colander.Set(), widget=deform.widget.SelectWidget( values=categories, multiple=True, default='Category 3', ), validator=colander.Length(min=1), ) I then made sure to update the appstruct similarly with str() so that I end up with this in it: 'categories': [{'id': '3', 'name': 'Category 3'}] This didn't add the 'selected' attribute for the select option either. Strange, right? On Wednesday, August 20, 2014 2:08:24 AM UTC-6, Rebelo wrote: > > > try replacing: > return [(c.id, c.name) for c in all_categories] > with > > return [(str(c.id) <http://c.id>, c.name) for c in all_categories] > > > > On Wednesday, August 20, 2014 6:32:16 AM UTC+2, Derek Hildreth wrote: >> >> I have a schema defined as: >> >> def get_category_choices(): >> all_categories = DBSession.query(Category).all() >> return [(c.id, c.name) for c in all_categories] >> >> categories = get_category_choices() >> >> class ProductForm(colander.Schema): >> >> name = colander.SchemaNode(colander.String(), title = "Name", >> validator=colander.Length(max=80), >> ) >> >> description = colander.SchemaNode(colander.String(), >> title="Description", >> validator=colander.Length(max=2000), >> >> widget=deform.widget.TextAreaWidget(rows=10, cols=60), >> ) >> >> categories = colander.SchemaNode( >> colander.Set(), >> widget=deform.widget.SelectWidget( >> >> values=categories, >> multiple=True, >> >> ), >> validator=colander.Length(min=1), >> ) >> >> >> Here's the code I'm using in Pyramid views.py: >> >> myform = Form(ProductForm(), buttons=('submit',)) >> form = myform.render(product.appstruct()) >> return {'form': form} >> >> >> My appstruct looks like this: >> >> {'description': 'Product description goes here ', 'categories': [{'id': >> 1L, 'name': 'Category 1'}, {'id':3L, 'name':'Category 2'}], 'id': 1L, >> 'name': 'Product name goes here'} >> >> >> I'd like the form to be rendered with a multiple select box that has >> 'Category 1' and 'Category 2' selected by default, like so: >> >> <select name="categories" id="deformField4" multiple="multiple"> >> <option value="1" selected="selected">Category 1</option> >> <option value="2">Category 2</option> >> <option value="3" selected="selected">Category 3</option> >> </select> >> >> >> I can't seem to get this to happen. I have tried to use 'default' (as >> shown deform demo here >> <http://deformdemo.repoze.org/sequence_of_defaulted_selects_with_initial_item/>) >> >> to get at least *one* item to select (for a test), and it doesn't seem >> to do it either. In other words, this: >> >> categories = colander.SchemaNode( >> colander.Set(), >> widget=deform.widget.SelectWidget( >> >> values=categories, >> multiple=True, >> >> default='3', >> >> ), >> validator=colander.Length(min=1), >> ) >> >> >> Results in this (notice lack of 'selected' attributes): >> >> <select name="categories" id="deformField4" multiple="multiple"> >> <option value="1">Category 1</option> >> <option value="2">Category 2</option> >> <option value="3">Category 3</option> >> </select> >> >> >> I must be missing something simple here. I'd really appreciate any help. >> Thanks in advance. >> > -- You received this message because you are subscribed to the Google Groups "pylons-discuss" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/pylons-discuss. For more options, visit https://groups.google.com/d/optout.
