You can but not advisable. You can for example, in controller,

for post in posts:
   db.post_comment.post_id.default = post.id
   post.form = SQLFORM(db.post_comment, formname='x%s' % post.id).process()

and in view replace {{=comment_form}} with {{=post.form}}

but you end up generating and processing lots of forms even if only one is 
used. I would do this with a single form and JS that moves the location of 
the form and populates a hidden post_id input field.

On Friday, 9 August 2013 19:52:16 UTC-5, hunt graham wrote:
>
> Hi all,
>
> I have a view that pulls from 2 db tables, 'post' and 'post_commet'.  In 
> the db, each comment has a post_id to specify which comment.  I display 
> them in the view with a nested loop:
>
> {{for post in posts:}}
>         <p><strong>Post:  </strong>{{=(post.post_content)}}</p>
>         {{_postId = post.id}}
>         {{comments=db(db.post_comment.post_id == post.id.select()}}
>         {{for c in comments:}}
>             {{print c.comment_text}}
>             <p><strong>Comment:  </strong>{{=c.comment_text}}</p>
>         {{pass}}
>         {{=comment_form}}
> {{pass}}
>
> 'comment_form' is a SQLFORM object for the 'post_comment' table.  What I'm 
> not sure how to do is automatically set the post_id of the new comment to 
> what it's "parent post" is.  If I was doing this manually with <form> and 
> <input> tags, I would set the name attribute of each input tag to the 
> post_id and grab it with request.vars.post_id or something like that.  But 
> this way I'd have to implement validation myself and add it to the db 
> manually.
>
> Is there a way I can do this using the 'comment_form' SQLFORM?
>
> Here is my db code if that matters. Thanks!
>
> import datetime
>
> # Define posts table
> db.define_table('post',
>     ##### We need to decide how we'll be handling audio first. #####
>     ##Field('content', 'upload'),
>     Field('user_id', db.auth_user, default=auth.user_id, readable=True, 
> writable=False, notnull=True),
>     Field('date_posted', 'date', default=datetime.datetime.now(), 
> notnull=True),
>     Field('time_posted', 
> default=datetime.datetime.time(datetime.datetime.now()), notnull=True, 
> writable=False, readable=True),
>     Field('post_content', readable=True, writable=True),
>     Field('up_votes', default=0),
>     Field('down_votes', default=0)
> )
>
> # Set form reqs for posts
> db.post.date_posted.writable = False
> db.post.date_posted.readable = True
> db.post.up_votes.readable = db.post.down_votes.readable = True
> db.post.up_votes.writable = db.post.down_votes.writable = False
>
> # Define comment table
> db.define_table('post_comment',
>     Field('user_id', db.auth_user, default=auth.user_id, readable=True, 
> writable=False, notnull=True),
>     Field('post_id', 'reference post', notnull=True),
>     Field('date_posted', 'date', default=datetime.datetime.now()),
>     Field('comment_text'),
>     Field('up_votes'),
>     Field('down_votes')
> )
>
> # Set form reqs for posts
> db.post_comment.post_id.writable = db.post_comment.post_id.readable = False
>
> db.post_comment.date_posted.writable = False 
> db.post_comment.date_posted.readable = True
> db.post_comment.up_votes.readable = db.post_comment.down_votes.readable = 
> True
> db.post_comment.up_votes.writable = db.post_comment.down_votes.writable = 
> False
>
>

-- 

--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to