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.


Reply via email to