5

私は wtforms を使用しています。データベース内の情報に基づいてフォーム定義を生成するものを作成する必要があります。動的なフォームの作成。私は何をする必要があるのか​​ を感じており、始めたばかりです. フォームを作成して wtforms/flask で使用することはできますが、フォームごとにわずかに異なるデータからフォームを定義することは、現在のスキル レベルを超えています。

誰かがこれを行い、提供する情報がありますか? やや漠然とした質問で、実際のコードはまだありません。例は見つかりませんでしたが、不可能ではありません。

mass of variable data to be used in a form --> wtforms ---> form on webpage

編集:

したがって、「たとえば」調査を使用できます。調査は、いくつかの SQLAlcehmy モデルで構成されています。調査は、任意の数の質問モデルが関連付けられたモデルです (質問は調査に属し、複数選択の質問では複雑になります)。簡単にするために、次の単純な json/dict 擬似コードを使用しましょう。

{survey:"Number One",
    questions:{
        question:{type:truefalse, field:"Is this true or false"},
        question:{type:truefalse, field:"Is this true or false"},
        question:{type:text, field:"Place your X here"}
     } 
 }

{survey:"Number Two",
    questions:{
        question:{type:text, field:"Answer the question"},
        question:{type:truefalse, field:"Is this true or false"},
        question:{type:text, field:"Place your email address here"}
     } 
 }

これの代わりに、5 つ以上のフィールド タイプを持つ数百のさまざまな長さを想像してみてください。このために WTForms を使用してフォームを管理する方法、または wtforms を使用する必要さえありますか? 必要に応じて静的フォームを定義できますが、まだ動的には定義できません。

余談ですが、simpleform を使用して Rails でこのようなことを行いましたが、Python atm で作業しているため (別の方法で、調査を例として使用していますが、質問/フィールド/回答は私が必要としていた多くの種類の入力)。

そうです、ある種の工場を建設する必要がある可能性があります。それを行うには時間がかかります。

http://wtforms.simplecodes.com/docs/1.0.2/specific_problems.html

https://groups.google.com/forum/?fromgroups=#!topic/wtforms/cJl3aqzZieA

4

2 に答える 2

4

実行時に適切なフィールドを基本フォームに追加するだけです。これを行う方法のスケッチを次に示します (かなり単純化されていますが)。

class BaseSurveyForm(Form):
    # define your base fields here


def show_survey(survey_id):
    survey_information = get_survey_info(survey_id)

    class SurveyInstance(BaseSurveyForm):
        pass

    for question in survey_information:
        field = generate_field_for_question(question)
        setattr(SurveyInstanceForm, question.backend_name, field)

    form = SurveyInstanceForm(request.form)

    # Do whatever you need to with form here


def generate_field_for_question(question):
    if question.type == "truefalse":
        return BooleanField(question.text)
    elif question.type == "date":
        return DateField(question.text)
    else:
        return TextField(question.text)
于 2012-09-11T16:41:34.560 に答える
0
class BaseForm(Form):
    @classmethod
    def append_field(cls, name, field):
        setattr(cls, name, field)
        return cls

from forms import TestForm
form = TestForm.append_field("do_you_want_fries_with_that",BooleanField('fries'))(obj=db_populate_object)

すべてのフォームに拡張クラスBaseFormを使用し、クラスに便利な append_field 関数を持っています。

(フォーム フィールドの) インスタンスはフィールドを追加できないため、フィールドが追加されたクラスを返します。

于 2013-08-19T23:09:34.263 に答える