You have created a custom widget, but the widget code doesn't set the 
default value of the widget based on the "value" argument to the widget. 
Try changing:

            seed = SELECT(**attr)
            for branch in tree:
                seed.append(branch)

to:

            seed = SELECT(*tree, value=value, **attr)

Anthony

On Wednesday, December 4, 2013 9:29:22 AM UTC-5, Ivo wrote:
>
> default.py:
> def products():
>     edit_in_form = 'edit' in request.args
>     db.product.price.writable = not edit_in_form
>
>     grid = SQLFORM.grid(db.product, 
>         columns=[
>                  db.product.name,
>                  db.product.price,
>                  ],
>         )
>
>     return dict(
>                 buttons=grid.gridbuttons,
>                 grid=grid)
>
> db.py:
> db.define_table('product',
>                    
>                    Field('name',length=512),
>                    Field('user_id', db.auth_user),
>                    Field('category'), #db.category
>                    Field('price'),
>                    )
> db.product.category.widget = category.select_widget()
>
> here's the widget itself:
>
>     def select_widget(self):    
>         categories = self._db().select(
>                             self._db[self._tablename].ALL, 
>                             orderby=self._db[self._tablename].lft
>         )
>         def widget(field, value, **attributes):
>             rgt = []
>             
>             tree = []
>                 
>             attr = OptionsWidget._attributes(field, {}, **attributes)
>             
>             values = re.compile('[\w\-:]+').findall(str(value))
>             
>             if hasattr(field.requires, 'options'):
>                 opts = []
>                 options = field.requires.options()
>             tree.append(OPTION(_value="", _class="branch"))
>             for cat in categories:
>                 if len(rgt) > 0:
>                     if rgt[-1] > cat.rgt:
>                         # open UL
>                         pass
>                     while rgt[-1] < cat.rgt:
>                         rgt.pop()
>                         if len(rgt) == 0:
>                             break
>                      
>                 s = ""
>                 for i in range(len(rgt)):
>                     s += "&nbsp;&nbsp;&nbsp;&nbsp;"
>                 s += cat.name
>                 branch = OPTION(
>                     XML(s),
>                     _value=cat.id,
>                     _class="branch",
>                 )
>                 
>                 tree.append(branch)   
>                 rgt.append(cat.rgt)
>                 
>             seed = SELECT(**attr)
>                           
>             for branch in tree:
>                 seed.append(branch)
>                 
>             return seed
>         return widget
>
>
>
>
> On Wednesday, December 4, 2013 2:56:24 PM UTC+1, Anthony wrote:
>>
>> Doesn't sound right. Can you show your code?
>>
>> On Wednesday, December 4, 2013 5:11:25 AM UTC-5, Ivo wrote:
>>>
>>> Is there a way to default the option widget to the current field value?
>>> The thing is that when you edit a form, the option widget always 
>>> defaults to empty (you need to make a selection even if the field already 
>>> contains a value). I'm quite sure a lot of users will not notice that the 
>>> select is empty, overriding the existing value upon save. They should 
>>> however need to be able to change the value if they choose to. I prefer to 
>>> do it from the controller side if possible.
>>>
>>>

-- 
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to web2py+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to