Hi,
is it possible to set a default value to a widgets.options.widget?

model:
db = DAL('sqlite://storage.sqlite')
db.define_table('mytable',
    Field('options_1', 'text', widget =
SQLFORM.widgets.options.widget ),
    Field('options_2', 'text', widget =
SQLFORM.widgets.options.widget ))

db.mytable.options_1.requires = [IS_IN_SET(['option_1', 'option_2',
'option_3', 'option_4', 'unknown'], zero = None)]
db.mytable.options_2.requires = [IS_IN_SET(['option_1', 'option_2',
'option_3', 'option_4', 'unknown'], zero = None)]

controller:
from gluon.tools import Crud

def index():
    crud = Crud(globals(), db)
    if request.args(0):
        values = db(db.mytable.id ==
request.args(0)).select(db.mytable.ALL)[0]
        form = crud.update(db.mytable, request.args(0), onvalidation =
validate_values)
        #####
        # How to set the default value (<option value="unknown"
selected="selected">unknown</option>)
        # mean stuff like
        # if values.option_1 == None:
        #     db.mytable.option_1 = 'unknown'
        # or
        #
        # if values.option_2 == None:
        #     form.custom.dspval.option_2 = 'unknown'
        #
        # This does not work properly! Any suggestions?
        # Is it posible to create an optionswidget, which must not be
selected and can be empty?
        #####
    else:
        values = None
        form = crud.create(db.mytable)
    return dict(form = form, values = values)

def validate_values(form):
    for value in form.vars:
        if form.vars[value] == 'unknown':
            form.vars[value] = None

In this special case the user have to select 'unknown' if he didn't
know the value during record creation, but later (during update), the
user must not select a value, None values are automatically set to
unknown.

thanks
max

Reply via email to