2016-06-13 7 views

答えて

0

このようにしますか?私はWebアプリケーションに似た何かを追加したい http://www.web2py.com/books/default/chapter/29/11/jquery-and-ajax#Conditional-fields-in-forms

、私は気圧表示するコードを全く持っていない私の最優先事項ではないので、関連する異なるテーブルがあると私はカスタムフィールドでSQLFORM.factoryを使用する必要がありますだと思いますデフォルトではcss display:noneに設定されています。私はjqueryを使用してそれらを要求時に表示し、最終的にすべてをDBに書きます。

しかし、この本の例は、探索を始める良い方法のようです。とにかく

、フォームのフィールドのようなフィールドはこれをしようと...

このモデルで:

コントローラで
db.define_table("people", Field("person", "string"), format='%(person)s') 

この:

def add_person(): 
    form = SQLFORM.factory(db.people, 
     buttons=[INPUT(_type = 'submit', _name = 'submit', 
       _value = 'Submit', _class = "btn-submit"), 
       INPUT(_type = 'button', _value = 'Add field', 
       _onClick = "$('<input type=text>').insertAfter(':input.string');", 
       _class = "btn-warning")]) 
    if form.process().accepted: 
     #do something 
     pass 
    elif form.errors: 
     response.flash = 'Errors on form' 
    return dict(form=form) 

上記のコードは、フィールドを追加します動的ではあるが、値を取得してデータベースに挿入するのが難しいように思えますが、それはあなたがやりたいことだと思います。

私は次の解決策は、引数として必要なフィールドの数を渡すだけで動作するはずだと思うと、送信時にすべてそれらを挿入します。

ご要望が理解できない場合は、より詳しく説明してください。

def add_person(): 
    fields = [] 
    for i in range(int(request.args(0) or 1)): 
     fields.append(Field('person ' + str(i), 
         default='text ' + str(i))) 

    form = SQLFORM.factory(*fields) 
    if form.process().accepted: 
     fields = [item[1] for item in form.vars.iteritems() 
        if item[0].startswith('person')] 
     for field in fields: 
      db.people.insert(person=field) 
    return dict(form=form) 
+0

私は実際に人のリストを追加したいと思います。ですから、+記号付きのボタンが必要です。それをクリックすると、フォームにフィールドを動的に追加します。 – user6063278

+0

今私はもう理解していないと思う...人と呼ばれる畑のある人と呼ばれるテーブルがあるとします。テーブルに人を追加するたびに、レコードrecord1、record2 ... recordnを作成しています。 これはですか?あなたはすぐに多くの人(レコード)を追加したいですか? – dido

+0

回答が編集されました。私は本当にweb2pyの柔軟性が大好きです... – dido

0

Uは手動 フィールド(「名前」、ラベル=「」、ウィジェット=「」を)行うべきで自動的form.Itにフィールドを追加傾ける。このようにuはフォーム

にフィールドを追加することができます
関連する問題