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