disregard previous post...... I got this controller to work perfectly when it is invoked by its url for a single item (one item per page)
def comment(): print 'in comment controller with item_id = ', request.args(0) item_id=request.args(0) db.itemcomments.item_ref.default=item_id db.itemcomments.created_by.represent=lambda id: db.auth_user[id].email form=SQLFORM(db.itemcomments, submit_button='Add') if form.accepts(request.vars, formname='xxx%s' % item_id): pass elif form.errors: response.flash = 'Invalid data.' comments=db(db.itemcomments.item_ref==item_id).select(orderby=db.itemcomments.created_on) return dict(form = form,comments=comments) But when invoked via the LOAD and there are multiple items on the page it does not work. On Mon, Sep 6, 2010 at 9:47 AM, David Waldrop <david.wald...@gmail.com>wrote: > I tried it both ways, but neither worked. Here is the current controller. > Am I naming and referencing the formname correctly? > > def comment(): > print 'in comment controller with item_id = ', request.args(0) > > item_id=request.args(0) > db.itemcomments.item_ref.default=item_id > db.itemcomments.created_by.represent=lambda id: db.auth_user[id].email > form=SQLFORM(db.itemcomments, submit_button='Add', > _formname='commentform') > > > if form.accepts(request.vars, session, formname='commentform%s' % > item_id): > print request.vars > sink=1 > elif form.errors: > response.flash = 'Invalid data.' > > > > comments=db(db.itemcomments.item_ref==item_id).select(orderby=db.itemcomments.created_on) > return dict(form = form,comments=comments) > > > On Mon, Sep 6, 2010 at 9:06 AM, mdipierro <mdipie...@cs.depaul.edu> wrote: > >> replace: >> >> if form.accepts(request.vars, session): >> >> with >> >> if form.accepts(request.vars): >> >> or >> >> if form.accepts(request.vars, session, formname='xxx%s' % item_id): >> >> else all forms have the same name and the mechanism to prevent CSRF >> gets confused on which form is which. >> >> >> >> On Sep 6, 7:20 am, "david.waldrop" <david.wald...@gmail.com> wrote: >> > I am using the LOAD command to invoke a custom comment module in a >> > view like this: >> > >> > {{=LOAD('comments','comment',args=(r.id), ajax=True)}}{{pass}} >> > >> > The LOAD statement is called for each row displayed on the view . >> > Note there are multiple rows. >> > >> > The controller is very straight forward and looks like this: >> > >> --------------------------------------------------------------------------------------------------------------- >> > def comment(): >> > print 'in comment controller with item_id = ', request.args(0) >> > >> > item_id=request.args(0) >> > db.itemcomments.item_ref.default=item_id >> > db.itemcomments.created_by.represent=lambda id: >> > db.auth_user[id].email >> > form=SQLFORM(db.itemcomments, submit_button='Add') >> > >> > if form.accepts(request.vars, session): >> > print request.vars >> > sink=1 >> > elif form.errors: >> > response.flash = 'Invalid data.' >> > >> > >> comments=db(db.itemcomments.item_ref==item_id).select(orderby=db.itemcomments.created_on) >> > return dict(form = form,comments=comments) >> > >> ------------------------------------------------------------------------------------------ >> > >> > At 1st appearance everything looks fine. The items are displayed >> > along with their corresponding comments. The input text box is >> > displayed along with the add button. The problem is that for any >> > given record the 1st time i try and add a new comment nothing >> > happens. However, the 2nd and subsequent times I add comments for a >> > record it works. >> > > > > -- > david.wald...@gmail.com | 301.526.9500 > -- david.wald...@gmail.com | 301.526.9500