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': '5', 'name': 'Industrial Products'}]


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.

Reply via email to