The example from the web2py application cookbook runs fine but when I tweak
it I get
<type 'exceptions.AttributeError'> 'tuple' object has no attribute 'replace'
In the code below, mine is on top named test() for input a test request.
The function named wizard came from the cookbook.
def tests():
STEPS = {
0: ('db.test_order.charge_number', 'db.test_order.program',
'db.test_order.requestor','db.test_order.need_date',
'db.test_order.comments'), #collect order details first
1: ('db.test.part', 'db.test.sample', 'db.test.test_type',
'db.test.process'), # feilds for 1st page
2: ('db.test.cal_standard', 'db.test.start', 'db.test.stop',
'db.test.step'), # fileds for 2nd page
3: ('db.test.vds', 'db.test.ids'), # fields for 3rd page
4: URL('done')} # url when wizard completed
step = int(request.args(0) or 0)
if not step in STEPS: redirect(URL(args=0))
fields = STEPS[step]
print "Fields: " + str(fields) + " Step " + str(step)
if step==0:
session.wizard = {}
mytable = db.test_order
else:
mytable = db.test
if isinstance(fields, tuple):
form = SQLFORM.factory(*[f for f in mytable if f.name in fields])
if form.accepts(request, session):
session.wizard.update(form.vars)
redirect(URL(args=step+1))
else:
mytable.insert(**session.wizard)
session.flash = T('wizard completed')
redirect(fields)
return dict(form=form, step=step)
def wizard():
STEPS = {0: ('field1', 'field2'), # fields for 1st page
1: ('field3', 'field4'), # fields for 2nd page
2: ('field5', 'field6'), # fields for 2nd page
3: URL('done')} # url when wizard completed
step = int(request.args(0) or 0)
if not step in STEPS: redirect(URL(args=0))
fields = STEPS[step]
print "Fields: " + str(fields) + " Step " + str(step)
if step==0:
session.wizard = {}
if isinstance(fields,tuple):
form = SQLFORM.factory(*[f for f in db.mytable if f.name in fields])
if form.accepts(request,session):
session.wizard.update(form.vars)
redirect(URL(args=step+1))
else:
db.mytable.insert(**session.wizard)
session.flash = T('wizard completed')
redirect(fields)
return dict(form=form,step=step)
def done():
return dict(message="End of wizard", back=A("New wizard", _href=URL(
"wizard")))
--