【问题标题】:Web2py - SQLFORM.smartgrid: how to retrieve field name and value before submissionWeb2py - SQLFORM.smartgrid:如何在提交前检索字段名称和值
【发布时间】:2016-08-02 13:55:41
【问题描述】:

我将 smartgrid 与“网格中”版本的值一起使用。为此,我使用 .represent 函数将 row_id 添加到变量名称中,这样我就可以在 request.post_vars 中检索要更新的内容,在其中我可以检索带有提交值的文件名 id 列表。 但我想确定用户在智能电网中所做的更改,而无需在数据库中进行额外的 I/O。是否有一个全局变量在用户更改之前记录表单字段和初始值?还是在将表单字段和值发送到视图之前提取表单字段和值的函数?

【问题讨论】:

  • 请显示您的代码,因为您不太清楚您要实现的目标。
  • db.define_table('cny',Field('f_cny')) @auth.requires_login() 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: d[r][f] = v for r in d: 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)) )) 返回字典(f=f)
  • 请以正确的格式将代码放入问题中。

标签: variables field edit web2py


【解决方案1】:
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)

【讨论】:

  • 一些带有答案的解释将帮助其他人理解简单的方法,伙计
猜你喜欢
  • 1970-01-01
  • 2011-10-01
  • 2012-10-03
  • 1970-01-01
  • 2014-10-31
  • 2010-10-31
  • 2011-03-17
  • 1970-01-01
相关资源
最近更新 更多