我使用带有'网格'版本值的smartgrid。为此,我使用.represent函数将row_id添加到变量名称,以便我可以在request.post_vars中检索要更新的内容,在那里我可以使用提交的值检索已归档名称,ID的列表。 但我想确定用户在智能网格中发生的变化,而不在数据库中进行额外的I / O.是否存在全局变量,其中在用户更改之前记录表单字段和初始值?或者是在将表单字段和值发送到视图之前提取表单字段和值的函数?
答案 0 :(得分:0)
db.define_table('cny',Field('f_cny'))
def tst():
tb = db.cny
if len(request.post_vars) >0:
d = {}
for k,v in request.post_vars.iteritems():
(f,sep,r) = k.partition('_r_')
if r:
if not r in d:
d[r] = {}
d[r][f] = v #should only be done if d[r][f] was changed!!!
for r in d:
if len(d[r]):
db(tb.id==r).update(**d[r])
tb.f_cny.represent=lambda v,r:string_widget(tb.f_cny, v, **{'_name':'f_cny_r_%s' % r.id})
f = SQLFORM.smartgrid(tb,
linked_tables=[],
selectable=(lambda ids:redirect(URL(request.controller,request.function,args=request.args))))
return dict(f=f)