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) > >