I am brand new to web2py and relatively new to python and I'm stuck, mainly
on a python issue.
My goal is to have a self-submitting form that allows a user to re-submit
the same simple form any number of times, capture the inputs each time and
display a list of the values entered, with the intent of acting on those
values when the user is done adding them. The filters will essentially be
where clause statements to execute a long running query, but I'm stuck on
the form aspects.
As you can see below, I use session.no_filters(number of filters) to change
the name of the form elements each time. I then try to use the dict update
method to add the request.vars dict to the dict that is supposed to hold
all the values (session.filter_list). The problem is that in the piece
I've called out here, I always hit the AttributeError. I know that x={1:2}
y={2:3} x.update(y) makes x={1: 2, 2: 3}, so from my perspective, this
should work, but I don't know what I'm talking about so...please help.
This is the piece that doesn't work, called out from the below full code
listing for this piece.
if form.accepts(request,session):
session.no_filters = session.no_filters+1
try:
session.filter_list.update(request.vars)
except NameError:
session.filter_list = request.vars
except AttributeError:
session.filter_list = 'This is an attribute error'
Controller code for add_filters
def add_filters():
try:
session.no_filters
except NameError:
session.no_filters = 0
response.flash="add filters"
#rows= db().select(db.tablecols.ALL)
form = FORM(
TR(LABEL('Filter Source'), \
SELECT(
_name='filter_src' + str(session.no_filters))),
TR(LABEL('Operator'), \
SELECT(
OPTION('='),
OPTION('<'),
OPTION('>'),
OPTION('in'),
_name='operator' + str(session.no_filters))),
TR(LABEL('Value'),INPUT(_name='value')),
INPUT(_type='submit',_value='Save Filter'),
INPUT(_type='button',_value='Add Filter',_onclick='addfilter2'),
INPUT(_type='button',_value='Create Segments',_onclick='createsegment'))
# if form correct, perform the insert
if form.accepts(request,session):
session.no_filters = session.no_filters+1
try:
session.filter_list.update(request.vars)
except NameError:
session.filter_list = request.vars
except AttributeError:
session.filter_list = 'This is an attribute error'
elif form.errors:
response.flash="form is invalid"
else:
response.flash="please fill in the form"
return dict(form=form,output=form.vars)
The view code is really just:
{{=BEAUTIFY(session.filter_list)}}
Thanks in advance!