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 += " " > 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.