0

私が知りたいのは、複数選択リストを作成する唯一の方法は、2つのテーブルの間にブリッジテーブルを作成することです??

テーブル (member,language,member_language) があります-> 各メンバーには 1 つまたは複数の言語があり、言語の複数選択リストを作成し、正常に機能する複数の言語を選択しました。

しかし、同じことをリージョンテーブルにしたいのですが、ここではメンバーにリージョンが1つしかないため、リージョンの複数選択リストから複数のリージョンを選択すると、「値がデータベースにありません!」というエラーが発生し、選択すると地域リストからの1つの値は正常に機能します。

選択した地域を満たすレポートを生成するために複数の地域を選択できる地域のリストのみが必要です。選択した地域はデータベースに挿入せず、クエリにのみ使用します。

これどうやってするの??

私のコード:

データベース部分

db.define_table("region_tmp", SQLField("name","string")) db.region_tmp.name.requires = IS_IN_DB(db,'region_tmp.name',multiple=True)

フォーム部分:

form=SQLFORM(SQLDB(None).define_table('myform',
       db.region_tmp.name,,submit_button="Generate Report")

私のコードの出力は、地域リストから複数の地域を選択すると、地域の複数選択リストになります。フォームには、「値がデータベースにありません!」と表示されます。地域リストの下にメッセージがあり、地域リストから1つの地域を選択すると正常に機能し、レポートが生成されます。

前もって感謝します

4

1 に答える 1

0

私が正しく理解している場合、データベースを変更せずに選択された領域を返すために使用される複数選択形式ですべての領域を表示したいですか?

最初にデータベースからすべてのリージョンを選択し(すでに選択していると思います)、次にそれらをFORMに配置する必要があります。たとえば、テーブルregionsに次のフィールドがある場合name

rows= db().select(db.regions.ALL)
components = [LI(INPUT(_name=i.name, _type="checkbox"), i.name) for i in rows]
return dict(form=FORM(INPUT(_type="submit"),
                      *components),
                      _method="post", _action="")

テンプレートに挿入できるフォームを返します。PやBRなど、LI以外のものを使用することもできます。また、より適切なフォーマット(テーブルなど)を追加することもできますが、これは単なるアイデアです。

それが最初の部分でした。選択した情報を抽出するには、コントローラー機能で次の情報を使用できます。

def index():
    # Prepare the form
    rows = db().select(db.regions.ALL)
    components = [LI(INPUT(_name=i.name, _type="checkbox"), i.name) for i in rows]
    form=FORM(INPUT(_type="submit"),
              *components,
              _method="post", _action="")

    if request.post_vars.get("submit"):
        # Check the answer
        # ... more code ...
        redirect(URL(r=request, f="show", args=request.args))
    return dict(form=form)

def show():
    # ... more code ...

(ifの後で状態を確認する必要がありますが、100%確信はありません)。index()フォームを表示するために最初に呼び出され、ユーザーが[送信]ボタンをクリックしたときに2回目に呼び出されます。2回目は、条件を入力し、必要な処理を実行して(リージョン値を取得)、出力を別のページ(ここでは関数show())にリダイレクトする必要があります。

全体的なアイデアを示しているだけですが、そのフレームワークを理解するには、web2pyのチュートリアルとFAQに実際に取り組む必要があります。

于 2009-10-11T13:49:37.713 に答える