I don't think this has anything to do with the wizard. Looks like all of your numeric fields are defined as "string" types (which is the default when you don't specify the "type" argument); yet your "formatter" method is expecting float values to be coming from the database.
Anthony On Thursday, December 24, 2015 at 11:05:41 AM UTC-5, aetagot...@gmail.com wrote: > > Using the form wizard, user inputs values into fields and upon completion > of form is redirected to sqlform.grid page, where the uploaded file can be > viewed, this all works. The problem is when I try to view the database I > get this error: > > > > * def formatter(self,value): return '%.2f' % valueTypeError: float > argument required, not str* > > This was not a problem until I implemented the form wizard, I can't figure > out what is causing it. > > > *Models:*from decimal import * > > class IS_MYDECIMAL(IS_DECIMAL_IN_RANGE): > def formatter(self,value): return '%.2f' % value > > db.define_table('tablecosts', > Field('yourname', 'string', requires=IS_NOT_EMPTY(), label='Your > name:'), > Field('thedate', 'date', requires=IS_DATE(format='%m-%d-%Y', > error_message=T('Enter date in the format: mm-dd-yyyy')), label='Report > date:'), > Field('num1', requires=IS_MYDECIMAL(None,None), > label='first:'), > Field('num2', requires=IS_MYDECIMAL(None,None), > label='second:'), > Field('num3', requires=IS_MYDECIMAL(None,None), > label='third:'), > Field('num4', requires=IS_MYDECIMAL(None,None), > label='fourth:'), > ##there are a lot more fields but this is the gist of it, to keep the post > short > Field('costs_file', 'upload', compute=costs_calc), > Field('created_by', 'reference auth_user', > default=auth.user_id, readable=False, writable=False)) > > > > > *Controller:* > > > @auth.requires_login() > def tablecosts(): > STEPS = {0: ('yourname', 'thedate'), # fields for 1st page > 1: ('num1', 'num2', 'num3'), # fields for 2nd page > 2: ('num4'), #fields for 3rd > ##this goes on for a few pages with more fields > 6: URL('costslist')} # 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.tablecosts = {} > if isinstance(fields,tuple): > form = SQLFORM.factory(*[f for f in db.tablecosts if f.name in > fields]) > if form.accepts(request,session): > session.tablecosts.update(form.vars) > redirect(URL(args=step+1)) > else: > db.tablecosts.insert(**session.tablecosts) > session.flash = T('form completed') > redirect(fields) > ... -- Resources: - http://web2py.com - http://web2py.com/book (Documentation) - http://github.com/web2py/web2py (Source code) - https://code.google.com/p/web2py/issues/list (Report Issues) --- 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/d/optout.