Thank you Anthony that works perfectly!

On Wednesday, December 4, 2013 4:44:13 PM UTC+1, Anthony wrote:
>
> 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