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 <[email protected]>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 <[email protected]> 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" <[email protected]> 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.
>>
>
>
>
> --
> [email protected] | 301.526.9500
>
--
[email protected] | 301.526.9500