I think you have just set the default parameter incorrectly. It should
go on the SchemaNode [0]. You have set it on the SelectWidget [1].

I tested it with the current deformdemo branch [2] and it seems to work
as you expect.

HTH.

[0]
http://docs.pylonsproject.org/projects/colander/en/latest/api.html#schema-related
[1] http://deform.readthedocs.org/en/latest/api.html#module-deform.widget
[2] http://pastebin.com/EHcukwcT

El 20/08/14 a las 08:35, Derek Hildreth escibió:
> 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 <http://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 <http://c.id>, c.name <http://c.name>) for c in
>     all_categories]
>     with
> 
>     return [(str(c.id) <http://c.id>, c.name <http://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 <http://c.id>, c.name <http://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]
> <mailto:[email protected]>.
> To post to this group, send email to [email protected]
> <mailto:[email protected]>.
> Visit this group at http://groups.google.com/group/pylons-discuss.
> For more options, visit https://groups.google.com/d/optout.

-- 
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