我在一个页面上有一个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作为更大页面的一部分。
答案 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)