テーブル内の特定のフィールドを更新するために使用するページに 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 をより大きなページの一部として表示しています。