This may also help... we did this in interestid.com when creating an event. @auth.requires_login() def create_event(): ''' NOTES: * new_event_form ''' from plugin_StepyForm import StepyForm steps = [ dict(title="Step 1", legend="First step", fields = db.event.fields[:5]), dict(title="Step 2", legend="Second step", fields = db.event.fields[5:10]), dict(title="Step 3", legend="Third step", fields = db.event.fields[10:15]), dict(title="Step 4", legend="Fourth step", fields = db.event.fields[15:20]), dict(title="Step 5", legend="Fifth step", fields = db.event.fields[20:]) ] form = StepyForm(db.event).process(steps) if form.accepted: db.event_attender.insert(event = form.vars.id, role = "organizer") redirect(URL('event','administer_event', args=form.vars.id)) return dict(form = form)
OR THIS: http://www.web2pyslices.com/slice/show/1452/form-wizard On Fri, Jun 14, 2013 at 6:49 PM, Jason (spot) Brower <encomp...@gmail.com>wrote: > Hey there. ;) > Have you tried this one? > https://groups.google.com/forum/?fromgroups#!topic/web2py/Lc-aZXVpsk4 > It seems that something similar has been implemented in that fashion in > the wizard for creating an app in web2py. > Does that help? > BR, > Jason > > > On Thu, Jun 13, 2013 at 11:55 AM, Ykä Marjanen <yka.marja...@gmail.com>wrote: > >> Hi, >> >> I've been programming Python for 10 years now, mainly algorithms. I found >> out about Web2py 4 months ago, and have been intensively learning it since. >> So thanks for all contributors! >> >> I'm developing a web interface where a user can create a new idea >> campaign. Because the campaign has lots of parameters which can change per >> campaign, I've decided to store most of the settings to the database as a >> dictionary using Pickle. I want to cut the creation of the campaign into >> phases to keep the visible form short. >> >> Based on the documentation (excellent book) I've decided to use Session >> to store the value from each phase and only store the variables into the >> database after the user has filled all forms. I use the same page to show >> different forms to keep the files to a minimum. >> >> My problems are the following: >> >> 1) How to use SQLFORM.dictform with a dictionary so that it shows menu >> options (and checklist) to some of the settings (e.g. >> IS_IN_SET(['one','two'])). The dictionary is created during the process, so >> the database doesn't have no values in it to fetch. >> >> 2) Am I doing to this properly (see code below)? >> >> Here's my code (I've simplified it to make it more understandable) >> >> Model: >> >> db.define_table('campaign', >> Field('name', unique=True), >> Field('pagename', unique=True), >> Field('description','text'), >> Field('created_by','reference auth_user', default=auth.user_id), >> Field('type', requires=IS_IN_SET(['open','private'])), >> Field('general_settings','text', filter_in=(lambda x: >> pickle.dumps(x)), filter_out=(lambda s: s and >> pickle.loads(s)),default=None)) >> >> Controller: >> >> if request.args(0,cast=str) == 'prev': >> try: >> if session.step > 0: >> session.step -= 1 >> else: >> redirect(URL('index')) >> except: >> session.step = 0 >> >> #determine in which step >> if not session.step: >> session.step = 0 >> >> if session.step == 0: >> form = SQLFORM(db.campaign, fields=['name','description']) >> form.add_button('Cancel',URL('index')) >> if form.validate(): >> session.step1_variables = form.vars >> session.step = 1 >> >> redirect(URL('new_campaign')) >> >> elif session.step == 1: >> form = SQLFORM(db.campaign, fields=['pagename']) >> form.add_button('Prev',URL('new_campaign',args='prev')) >> if form.validate(): >> session.step2_variables = form.vars >> session.step = 2 >> >> redirect(URL('new_campaign')) >> >> elif session.step == 2: >> settings_dict = dict(privacy="", registration="self") >> form = SQLFORM.dictform(settings_dict) >> form.add_button('Prev',URL('new_campaign',args='prev')) >> form.custom.widget.privacy['requires'] = >> IS_IN_SET(['open','closed']) >> if form.validate(): >> session.step3_variables = form.vars >> session.step = 3 >> >> redirect(URL('new_campaign')) >> >> elif session.step == 3: >> form = FORM.confirm('Are you sure?') >> if form.accepted: >> session.step = 0 >> #Store all variables to the database >> #Redirect to the new campaign page >> >> else: >> redirect(URL('index')) >> >> return dict(form=form, step=session.step) >> >> View: >> >> {extend 'layout.html'}} >> {{if step == 0:}} >> <h2>{{=T('Create new campaign')}}</h2> >> {{=T('Welcome to XXX. Create a campaign using this simple wizard')}} >> {{elif step == 1:}} >> <h2>{{=T('Create new campaign')}}</h2> >> {{=T('Please add your pagename')}} >> {{elif step == 2:}} >> <h2>{{=T('Create new campaign')}}</h2> >> {{=T('Make some settings')}} >> {{elif step == 3:}} >> <h2>{{=T('Create new campaign')}}</h2> >> {{=T('Here are all your settings. Click the button the accept them')}} >> {{pass}} >> {{=form}} >> >> -- >> >> --- >> 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. >> >> >> > > -- --- 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.