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 回答