2016-08-02 5 views
0

私は値の 'グリッド'版のsmartgridを使用します。これを行うには、.represent関数を使用して変数名にrow_idを追加します。これにより、request.post_varsで更新するものを取得できます。ここで、提出された名前のidsのリストを取得値とともに取得できます。 しかし、DBで追加のI/Oをせずに、スマートグリッド内のユーザーによって何が変更されたのかを確認したいと思います。ユーザーが変更する前にフォームフィールドと初期値が記録されるグローバル変数はありますか?または、ビューに送信する前にフォームフィールドと値を抽出する関数ですか?Web2py - SQLFORM.smartgrid:提出する前にフィールド名と値を取得する方法

+0

達成しようとしていることがはっきりしていないので、コードを示してください。 – Anthony

+0

auth.requires_login @デシベル。define_table( 'CNY'、フィールド( 'f_cny')) () DEF TST():= db.cny TB(request.post_vars)lenの場合> 0: D = { } rの場合 d [r] [f] = v rの場合は、 のk、vの場合はrequest.post_vars.iteritems(): (f、sep、r)= k.partition( '_ r_') d: db(tb.id_= r).update(** d [r]) tb.f_cny.represent = lambda v、r:string_widget(tb.f_cny、v、** {'_ name': ' (URL、request.controller、request.function、args = request.args))リダイレクト(URLの(request.controller、request.functions、args = request.args))) ) return dict(f = f) – Serge

+1

適切な書式で質問にコードを入れてください。 – Anthony

答えて

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) 
+1

答えの説明は、他の人が簡単に理解できるようになるでしょう – Prasad

関連する問題