Massimo's suggestion seems to work for other integer fields but not
for id.


On Dec 15, 10:57 am, Seamon <seamon.l...@gmail.com> wrote:
> Changing the id to e_id solved the problem pretty well and it's a
> nicer
> solution than type checking the id if it is a list. :) The funny thing
> is
> that this code actually worked on an older web2py server and the
> problem
> started after the update. Thanks for help.
>
> On 14. Dec., 17:11 h., DenesL <denes1...@yahoo.ca> wrote:
>
> > The problem is the use of 'id' in the vars.
> > What happens is that the form already has an 'id' field, although it
> > is hidden it is still being sent back on submit, and then you add
> > another 'id' in the vars so you end up with two, hence '|1|1|'.
>
> > To fix just use a variable name that is not in the form.
>
> > On Dec 13, 5:38 pm, Seamon <seamon.l...@gmail.com> wrote:
>
> > > Hi,
>
> > > I've just experienced strage behaviour while using SQLFORM to update
> > > records
> > > in MySQL DB. The code is pretty basic (see below), just a little
> > > cookbook application
> > > and this part was ment to edit the recipe. First all seemed ok - the
> > > form was displayed
> > > as specified, but after submitting the changes I kept getting error
> > > like this:
> > > ValueError: invalid literal for int() with base 10: '|1|1|'
>
> > > Where the |1|1| was clearly connected to the record id. For some
> > > reason the form.accept
> > > was ignored and the whole result from the form submit came in as an
> > > request (so it contained an id
> > > but it was '|1|1|') and that was the problem. Apparently it can be
> > > fixed with some type checking, but
> > > it shouldn't by working like this as far as I know. Any idea why this
> > > happens?
>
> > > DB Table:
> > > cbook.define_table ('recipe',
> > >                     Field ('Food_Name','string',length = 40),
> > >                     Field ('id_author','integer',default = -1),
> > >                     Field ('creation_date','date'),
> > >                     Field ('suroviny','text'),    #resources
> > >                     Field ('popis','text'),        #info
> > >                     Field ('postup','text'),      #recipe
> > >                     Field ('verejny','boolean') #public
> > >                     )
> > > Code:
> > > def edit_recipe():
> > >     if session.authorized:
>
> > >         id = request.vars.id
> > >         record=cbook(cbook.recipe.id==id).select()
>
> > >         form = SQLFORM (cbook.recipe,submit_button='Uloz
> > > zmeny',record=record[0],showid=False,fields =
> > > ['Food_Name','popis','suroviny','postup','verejny'] )
>
> > >         if form.accepts (request.vars,session):
> > >             response.flash = 'Recipe updated'
> > >             redirect(URL(r=request,c='recipes',f='edit_recipe',vars =
> > > {'id':id}))
>
> > >         return dict (form=form,id=id)
>
>

Reply via email to