Running 1.99.4

I have not been able to get the IS_IN_SET validator to work properly.
I don't know why this should be.

When used with SQLFORM to edit a record, the select field refuses to
show the current value of the field.  Instead it shows the first value
in the list or the zero value for the field.

So I made an alternative widget.  The code consists of two functions,
below.

If you are having similar problems, feel free to use it.

The _style definition at the end of the call is there to make sure I
was seeing my widget instead of the default.  It is not necessary for
the widget to work.

############################################################

def is_it_selected(current_value, option, multiple):
    if len(current_value) == 1 or not multiple:
        current_value=current_value[0]
        if current_value==option:
            out = 'selected'
        else:
            out = None
    else:
        if option in current_value:
            out='selected'
        else:
            out=None
    return out

def my_select_widget(field,value):
    # diagnostics uncomment to learn
    #print 'value'
    #print value
    #print 'type(value)'
    #print type(value)

    f = str(field)
    f_name = f.split('.')[-1]
    f_id = f.replace('.', '_')
    f_requires = db[request.controller][f_name].requires
    the_set = f_requires.theset
    the_multiple = f_requires.multiple
    option_set = []
    for t in the_set:
        is_selected = is_it_selected(value, t, the_multiple)
        option_set.append(OPTION(t, _selected = is_selected))
    return SELECT(option_set, _name='status', _id='buckslips_status',
         _style='color:red;'
    )

Reply via email to