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.