I thnk in some places you use request.vars.id and in other places you
use request.args(0) and that is the confusion. Try this:

def edit_journal():
    opskrif = T('Editing journal record no. %d') %
int(request.vars.id)
    vorm = crud.update(db.akb_journal,     request.args(0),
                       deletable = False,
                       next = 'articles/[id]') # << shortcut
    return dict(vorm=vorm, opskrif=opskrif)

def show_journal():
    opskrif = H1(T('Journal record no. %d') % int(request.args(0)))
    vorm = crud.read(db.akb_journal, request.args(0))
    link =
A('Edit',_href=URL('default','edit_journal',args=request.args(0)))
    return dict(vorm=vorm, opskrif = opskrif, link=link)

On Aug 23, 8:17 am, Johann Spies <johann.sp...@gmail.com> wrote:
> The following scenario illustrated to me that I do not understand enough of
> what web2py is doing in the background.
>
> I want a crud.read form and a link to edit the same form (see the two
> functions below).  At first I wanted to use the link
> like this:
>
> link = A('Edit', _href=URL(c='default', f='edit_journal',
> vars=request.vars(0))) but web2py would not accept that.
> I have then changed it to what is shown below.
>
> def edit_journal():
>
>     opskrif = T('Editing journal record no. %d') % int(request.vars.id)
>     vorm = crud.update(db.akb_journal,     request.vars.id,
>                        deletable = False,
>                        next = URL(r = request,
>                                   c = 'default' ,
>                                   f = 'articles',
>                                   args=request.args))
>     return dict(vorm=vorm, opskrif=opskrif)
>
> def show_journal():
>     opskrif = H1(T('Journal record no. %d') % int(request.args(0)))
>     vorm = crud.read(db.akb_journal, request.args(0))
>     link = 
> A('Edit',_href=URL(c='default',f='edit_journal',vars=dict(id=request.args(0 
> ))))
>     return dict(vorm=vorm, opskrif = opskrif,
>                 link=link
>                 )
>
> When I first click on the link in the second function the crud.update
> runs as expected in the first function.
> I would expect that after submitting the form I would be redirected to
> default/articles, but it does not happen.
> In stead the program returns to edit journal and while the content of
> request.vars was
> <Storage {'id': '8995'}> the first time now it is
> <Storage {'publisher': '', 'title': 'South African Journal of
> Continuing Medical Education', 'issn': '1016-6742', '_formname\
> ': 'akb_journal/8995', 'standard_name': '', '_next':
> '/akb/default/articles', '_formkey':
> 'f9ed441dd56941349a6e9b31fa29eff7'\
> , 'abbrev_iso': '', 'id': ['8995', '8995'], 'subject': ''}>
> Please take note what happened to the id field.
>
> Now my questions:
>
> Why does the above code not cause web2py to redirect to the 'articles'
> function after submitting the form?
> Why is not possible for me to use request.args in the link in the
> second function?
> What is the correct way to do this?
>
> Regards
> Johann
>
> --
>  May grace and peace be yours in abundance through the full knowledge of God
> and of Jesus our Lord!  His divine power has given us everything we need for
> life and godliness through the full knowledge of the one who called us by
> his own glory and excellence.
>                                                     2 Pet. 1:2b,3a

Reply via email to