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

Reply via email to