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