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