Hi J,

Of course you were here too :)

I solved the issue by using SQLFORM.factory to generate the form for those 
pages where there was a dictionary variable. I've edited the code so that I 
think I got it working properly.

I save the form.vars of each page to session.page_nro and at the end (four 
phases) I add them all to a one dictionary to add it to database: 
db.campaign.insert(**db_data).

It seems to work okay.

On Thursday, June 13, 2013 11:55:08 AM UTC+3, Ykä Marjanen 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.


Reply via email to