0

テーブル内の特定のフィールドを更新するために使用するページに SQLFORM.factory があります。そのフィールドは私が作ったドロップダウンテーブルです

Field('visibility',requires=IS_IN_SET(['everyone','subscribers','friends','nobody']))

したがって、SQLFORM.factory のフィールドは同じように見えます。違いは、SQLFORM.factory のデフォルトを特定のテーブルのそのフィールドの現在の値にしたいことです。デフォルトにすることによって。テーブルの目的のエントリに対してクエリを実行し、そのフィールドを選択すると、それがデフォルトの選択されたオプションになります。初めてロードするときは完璧です。フォームがそのように受け入れられた後、更新を行い、更新が機能的に機能します。

if subForm.accepts(request,session,dbio=True):
    if myForm.vars.visible != theDefault:
        db(row).update(visibility = subForm.vars.visibility)

ページを送信すると、選択したオプションはテーブル内のそのフィールドの現在の値ではなく、常に前の値になります。データベース管理者を見ると、テーブルは正常に更新されていましたが、デフォルトとして選択する正しいオプションを取得できませんでした。私のデフォルトが「全員」で、「友達」を選択して送信した場合、送信後にページがリロードされたときに選択されたのは「全員」のままです。「誰も」を選択して送信した場合、更新後は「友達」です。

それが役立つ場合は、この SQLFORM.factory が含まれているビューと iFrame をより大きなページの一部として表示しています。

4

1 に答える 1

0

何時間も経った後、それを行う方法は次のとおりです(ハックですが、機能します)

#This is a kludge to get the right default visibility selected
if request.vars.visible == None:
    visibleDefault = theDefault
else:
    visibleDefault = request.vars.visible

form = SQLFORM.factory(
       FIELD(Field('visible',requires=IS_IN_SET(['everyone','subscribers','friends','nobody'],zero=None),default=visibleDefault),
       table_name='table')

if form.accepts(request,session,dbio=True):
    if form.vars.visible != theDefault:
        db(row).update(visibility = form.vars.visible)
于 2013-08-15T21:54:47.507 に答える