web2py SQLFORM.factory默认不更新

时间:2013-08-14 21:07:01

标签: forms web2py

我在一个页面上有一个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)

如果您提交页面,则所选选项不是表格中该字段的当前值,它始终是之前的那个。如果我查看我的数据库管理员,表格更新正常但我无法获取正确的选项以选择作为我的默认值。如果我的默认设置是“每个人”'然后我选择并提交朋友'那么当提交后页面重新加载时所选择的选项仍然是“每个人”#39;如果我然后选择并提交“没有人”,则在刷新之后它就是“朋友”。

如果有帮助,我将显示此SQLFORM.factory所在的视图和iFrame作为更大页面的一部分。

1 个答案:

答案 0 :(得分:0)

经过几个小时,这就是你如何做到的(sorta hackey但是它有效)

#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)