I don't think its to do with the model (the table in question has no
float or decimal in any case).

I think it has to do with the handling of next= in crud.

The controller code (somewhat simplified, but still reproduces the
problem) is:

def memberform():
        if request.vars.membid:
                next = URL('memberform', vars=dict(membid=request.vars.membid,
next=request.vars.next))
                form = crud.update(db.Members, request.vars.membid, next=next)
        else:
                form = crud.create(db.Members, next=request.vars.next)
        return dict(form=form, next=request.vars.next,
membid=request.vars.membid)

The first time in, with membid the ID of an existing record, the
record is correctly displayed via the crud.update() form.  When a
field is edited and the form submitted, the failure occurs.

On Oct 28, 7:59 am, Richard Vézina <ml.richard.vez...@gmail.com>
wrote:
> Without model I think it difficult to debug...
>
> But the problem come from a float type error, so there must be a failing
> constrain on one of your field... Look at you member model if there is a
> double type field or decimal and make sure you have a validator with
> appropriate constraining domain...
>
> doubleIS_FLOAT_IN_RANGE(-1e100, 1e100)decimal(n,m)IS_DECIMAL_IN_RANGE(-1e100,
> 1e100)
> Richard
>
>
>
>
>
>
>
> On Sat, Oct 15, 2011 at 10:15 AM, David Manns <dgma...@gmail.com> wrote:
> > This problem appeared when I moved my application from x to 1.99.2.
>
> > I use crud.update to display and modify a member directory record.
> > Selecting and displaying the record works, but when submitting an updated
> > record I get a failure:
>
> > TRACEBACK
>
> > 1.
> > 2.
> > 3.
> > 4.
> > 5.
> > 6.
> > 7.
> > 8.
> > 9.
> > 10.
> > 11.
> > 12.
>
> > Traceback (most recent call last):
> >   File "C:\Documents and Settings\David Manns\My 
> > Documents\ocsnedb\gluon\restricted.py", line 194, in restricted
> >     raise
> >   File "C:/Documents and Settings/David Manns/My Documents/ocsnedb 
> > saved/applications/init/controllers/default.py" 
> > <http://127.0.0.1:8000/admin/default/edit/init/controllers/default.py>, 
> > line 889, in <module>
> >   File "C:\Documents and Settings\David Manns\My 
> > Documents\ocsnedb\gluon\globals.py", line 149, in <lambda>
> >   File "C:/Documents and Settings/David Manns/My Documents/ocsnedb 
> > saved/applications/init/controllers/default.py" 
> > <http://127.0.0.1:8000/admin/default/edit/init/controllers/default.py>, 
> > line 273, in memberform
> >     deletable = False, next=next, onvalidation=setmodified)
> >   File "C:\Documents and Settings\David Manns\My 
> > Documents\ocsnedb\gluon\tools.py", line 2994, in update
> >     formname=DEFAULT,
> >   File "C:\Documents and Settings\David Manns\My 
> > Documents\ocsnedb\gluon\tools.py", line 79, in replace_id
> > TypeError: float argument required
>
> > The controller code looks like:
>
> > def memberform():
> >  chkurlreader()
> >  if request 
> > <http://127.0.0.1:8000/examples/global/vars/request>.vars.membid:
> >      member=db.Members[request 
> > <http://127.0.0.1:8000/examples/global/vars/request>.vars.membid]
> >      db.Members.Email.comment = A 
> > <http://127.0.0.1:8000/examples/global/vars/A>('Add/Edit/Delete Email 
> > Address(es)',
> >          _href=URL 
> > <http://127.0.0.1:8000/examples/global/vars/URL>('memberemail', 
> > vars=dict(membid=request 
> > <http://127.0.0.1:8000/examples/global/vars/request>.vars.membid, 
> > next=request 
> > <http://127.0.0.1:8000/examples/global/vars/request>.vars.next)))
> >      db.Members.Affiliation.comment = A 
> > <http://127.0.0.1:8000/examples/global/vars/A>('Add/Edit/Delete 
> > Affiliation(s)',
> >          _href=URL 
> > <http://127.0.0.1:8000/examples/global/vars/URL>('memberaffiliation', 
> > vars=dict(membid=request 
> > <http://127.0.0.1:8000/examples/global/vars/request>.vars.membid, 
> > next=request 
> > <http://127.0.0.1:8000/examples/global/vars/request>.vars.next)))
> >      if member.Status in ('Full', 'Student'):
> >          db.Members.Paiddate.comment = A 
> > <http://127.0.0.1:8000/examples/global/vars/A>('Process dues payment',
> >              _href=URL 
> > <http://127.0.0.1:8000/examples/global/vars/URL>('memberdues', 
> > vars=dict(membid=request 
> > <http://127.0.0.1:8000/examples/global/vars/request>.vars.membid, 
> > next=request 
> > <http://127.0.0.1:8000/examples/global/vars/request>.vars.next)))
> >      else:
> >          db.Members.Paiddate.comment = 'Only for Full & Student Members'
> >      next = URL 
> > <http://127.0.0.1:8000/examples/global/vars/URL>('memberform', 
> > vars=dict(membid=request 
> > <http://127.0.0.1:8000/examples/global/vars/request>.vars.membid, 
> > next=request 
> > <http://127.0.0.1:8000/examples/global/vars/request>.vars.next))
> >      form = crud.update(db.Members, request 
> > <http://127.0.0.1:8000/examples/global/vars/request>.vars.membid,
> >                  deletable = False, next=next, onvalidation=setmodified)
> >      form[0][-1][1].append(INPUT 
> > <http://127.0.0.1:8000/examples/global/vars/INPUT>(_type="button",_value="Cancel",
> >              _onclick="window.location='%s';"%request 
> > <http://127.0.0.1:8000/examples/global/vars/request>.vars.next))
> >  else:
> >      db.Members.Email.comment = 'Add email address(es) after creating basic 
> > record'
> >      db.Members.Affiliation.comment = 'Add affiliation(s) after creating 
> > basic record'
> >      db.Members.Paiddate.comment = 'Usually set by processing dues payment'
> >      form = crud.create(db.Members, next=request 
> > <http://127.0.0.1:8000/examples/global/vars/request>.vars.next, 
> > onaccept=newmember)
> >      form[0][-1][1].append(INPUT 
> > <http://127.0.0.1:8000/examples/global/vars/INPUT>(_type="button",_value="Cancel",
> >              _onclick="window.location='%s';"%request 
> > <http://127.0.0.1:8000/examples/global/vars/request>.vars.next))
> >  return dict(form=form, next=request 
> > <http://127.0.0.1:8000/examples/global/vars/request>.vars.next, 
> > membid=request 
> > <http://127.0.0.1:8000/examples/global/vars/request>.vars.membid)

Reply via email to