2016-11-25 7 views
3

大きな問題があります。私は、次の表ajax関数を使用してデータベースにデータを格納する(web2pyフレームワーク)

db.define_table('post', 
       Field('user_email', default=auth.user.email if auth.user_id else None), 
       Field('title', 'string', requires=IS_NOT_EMPTY()), 
       Field('body', 'text', requires=IS_NOT_EMPTY()), 
       Field('votes', 'integer', default=0, readable=False, writable=False), 
       auth.signature 
       ) 

db.define_table('comm', 
       Field('post','reference post'), 
       Field('body','text'), 
       auth.signature 
       ) 

だから、基本的にユーザーが自分がログインしているときのポストを作成することができますがあります。私は、ページ全体をリロードせずにポストにコメントを追加する機能を追加したいです。この場合、私はajax関数を使用しなければならないと思います。

「参照」の仕組みが分かりません。私は、新しいテキストを挿入するときに、どの投稿が出てくるかを指定しなければならないと思いますが、私が言ったように、私は混乱しています。 2つのテーブルを関連付ける方法を簡単に説明できますか?特定の投稿に表示されるコメントを指定する必要があるPython関数をコーディングする必要があるためです。

ご覧のとおり、ビュー内の投稿のすべてのデータを取得するには、コントローラのPython関数を使用します。私はテキストエリアの入力を取得し、データベースに入れて、何とかこの投稿に表示したいと思います。

https://wwu39.pythonanywhere.com/prostudy

私は私のウェブサイトはpythonanywhereに起動できます。私が持っている問題は、フォーラムのページにあります。フォーラムにアクセスするには、ログインする必要があります。私はあなたにスパムするつもりはないと心配しないでください。これは、誰も使用しない小さなアプリです。フォーラムに移動し、投稿を選択すると、問題が表示されます。コメントを追加ボタンはまだ何もしません。私はユーザー認証機能を無効にしました。

答えて

2

Web2py負荷コンポーネントは、問題への最適な解決策になります。まったく同じ例は、 web2pyブックで説明されています。LOADを参照してください。 web2pyコンポーネントを使用する場合は、JavaScriptコードを記述する必要はなく、他の場所でも同じコンポーネントを簡単に使用できます。

上記の例を実行してください。あなたは、テーブル定義、コントローラ、ロードURLのいくつかの変更を行う必要があります。

投稿した列をコメントのスキーマに追加して、投稿の列を読み書き可能にすることを偽にします。フォームでその列を表示したくないので、負荷部品を埋め込むことながら、親コントローラから

{{=LOAD('comments','post.load', vars={'post_id': parent_post_id}, ajax=True)}} 

パスparent_post_idをvarsのよう が

db.define_table('comment_post', 
       Field('post','reference post', readable=False, writable=False), 
       Field('body','text'), 
       auth.signature 
       ) 

はその後、ポストIDを渡し、あなたのケースでは、私はrequest.args(0)を考えます親IDを含んでいます。

コントローラでは、今、負荷のURLから渡されたpost_idのを使用し、このことができますpost

def post(): 
    db.comment_post.post.default = request.vars.post_id 
    return dict(form=SQLFORM(db.comment_post).process(), 
       comments=db(db.comment_post).select()) 

希望をフィールドに設定します。

関連する問題