Re: [web2py] Update many rows at once separately
It worked! Thanks Bruno.After this I just needed to add the post_vars.iteritems() because without it were giving the 'Too many values to unpack' error This kind of data manipulation cleared many things to me. Em quarta-feira, 22 de agosto de 2012 18h07min23s UTC-3, rochacbruno escreveu: You have to give id and name to form inputs, and select needs options. Ttry this on web2py shell print SELECT(*[OPTION(option, **{_value: option, _selected:selected if option == 1 else None}) for option in (0, 1)], _name=1, _id=1) select id=1 name=1option value=00/optionoption selected=selected value=11/option/select Adapting to your case: {{for row in rows:}} trtd{{=row.descricao}}/tdtd{{=SELECT(*[OPTION(option, **{_value: option, _selected:selected if option == row.nivel else None}) for option in (0, 1)], _name=row.id, _id=row.id) }} {{pass}} On Wed, Aug 22, 2012 at 5:47 PM, Fabiano Faver far...@gmail.comjavascript: wrote: I changed the previous model a little: MODEL: db.define_table('erro_impressora', Field('descricao','string'), Field('nivel', 'integer' ) ) Controllers: def teste(): rows = db(db.erro_impressora).select() return dict(rows=rows) def update_nivel(): for key, value in request.post_vars: try: db.erro_impressora[key].update_record(nivel=value) except: pass db.commit() redirect(URL('teste')) VIEW: {{extend 'layout.html'}} form action={{=URL('update_nivel')}} method=POST table {{for row in rows:}} trtd{{=row.descricao}}/tdtd{{= SELECT(0,1, value=row.nivel ) }} {{pass}} trtd colspan='2'{{=INPUT(_type='submit') }}/td/tr /table /form I`ve done what you suggested but i couldn`t put it to update. action update_nivel() is receiving a empty request.post_vars Em quarta-feira, 22 de agosto de 2012 15h36min52s UTC-3, rochacbruno escreveu: You can try something like this: def test(): rows = db(db.test).select() return dict(rows=rows) def update_level(): for key, value in request.post_vars: try: db.table[key].update_record(**level=value) except: # do something if key is invalid. db.commit() redirect(URL TO REDIRECT AFTER UPDATES) # or use ajax Now in views/controller/test.html form action={{=URL(update_level)**}} method=POST table {{for row in rows:}} tr td{{=row.name}}/tdtd *input type=text value= id={{= row.id}} name={{=row.id}} /*/td/tr {{pass}} /table /form On Wed, Aug 22, 2012 at 3:16 PM, Fabiano Faver far...@gmail.com wrote: | name | level | --** test 1 |combobox(0) | test 2 |combobox(1) | test 3 |combobox(0) | | Submit | - -- --
Re: [web2py] Update many rows at once separately
You can try something like this: def test(): rows = db(db.test).select() return dict(rows=rows) def update_level(): for key, value in request.post_vars: try: db.table[key].update_record(level=value) except: # do something if key is invalid. db.commit() redirect(URL TO REDIRECT AFTER UPDATES) # or use ajax Now in views/controller/test.html form action={{=URL(update_level)}} method=POST table {{for row in rows:}} tr td{{=row.name}}/tdtd *input type=text value= id={{= row.id}} name={{=row.id}} /*/td/tr {{pass}} /table /form On Wed, Aug 22, 2012 at 3:16 PM, Fabiano Faver far...@gmail.com wrote: | name | level | -- test 1 |combobox(0) | test 2 |combobox(1) | test 3 |combobox(0) | | Submit | - --
Re: [web2py] Update many rows at once separately
Thanks Bruno, I'll try it now. Em quarta-feira, 22 de agosto de 2012 15h36min52s UTC-3, rochacbruno escreveu: You can try something like this: def test(): rows = db(db.test).select() return dict(rows=rows) def update_level(): for key, value in request.post_vars: try: db.table[key].update_record(level=value) except: # do something if key is invalid. db.commit() redirect(URL TO REDIRECT AFTER UPDATES) # or use ajax Now in views/controller/test.html form action={{=URL(update_level)}} method=POST table {{for row in rows:}} tr td{{=row.name}}/tdtd *input type=text value= id={{= row.id}} name={{=row.id}} /*/td/tr {{pass}} /table /form On Wed, Aug 22, 2012 at 3:16 PM, Fabiano Faver far...@gmail.comjavascript: wrote: | name | level | -- test 1 |combobox(0) | test 2 |combobox(1) | test 3 |combobox(0) | | Submit | - --
Re: [web2py] Update many rows at once separately
I changed the previous model a little: MODEL: db.define_table('erro_impressora', Field('descricao','string'), Field('nivel', 'integer' ) ) Controllers: def teste(): rows = db(db.erro_impressora).select() return dict(rows=rows) def update_nivel(): for key, value in request.post_vars: try: db.erro_impressora[key].update_record(nivel=value) except: pass db.commit() redirect(URL('teste')) VIEW: {{extend 'layout.html'}} form action={{=URL('update_nivel')}} method=POST table {{for row in rows:}} trtd{{=row.descricao}}/tdtd{{= SELECT(0,1, value=row.nivel ) }} {{pass}} trtd colspan='2'{{=INPUT(_type='submit') }}/td/tr /table /form I`ve done what you suggested but i couldn`t put it to update. action update_nivel() is receiving a empty request.post_vars Em quarta-feira, 22 de agosto de 2012 15h36min52s UTC-3, rochacbruno escreveu: You can try something like this: def test(): rows = db(db.test).select() return dict(rows=rows) def update_level(): for key, value in request.post_vars: try: db.table[key].update_record(level=value) except: # do something if key is invalid. db.commit() redirect(URL TO REDIRECT AFTER UPDATES) # or use ajax Now in views/controller/test.html form action={{=URL(update_level)}} method=POST table {{for row in rows:}} tr td{{=row.name}}/tdtd *input type=text value= id={{= row.id}} name={{=row.id}} /*/td/tr {{pass}} /table /form On Wed, Aug 22, 2012 at 3:16 PM, Fabiano Faver far...@gmail.comjavascript: wrote: | name | level | -- test 1 |combobox(0) | test 2 |combobox(1) | test 3 |combobox(0) | | Submit | - --
Re: [web2py] Update many rows at once separately
You have to give id and name to form inputs, and select needs options. Ttry this on web2py shell print SELECT(*[OPTION(option, **{_value: option, _selected:selected if option == 1 else None}) for option in (0, 1)], _name=1, _id=1) select id=1 name=1option value=00/optionoption selected=selected value=11/option/select Adapting to your case: {{for row in rows:}} trtd{{=row.descricao}}/tdtd{{=SELECT(*[OPTION(option, **{_value: option, _selected:selected if option == row.nivel else None}) for option in (0, 1)], _name=row.id, _id=row.id) }} {{pass}} On Wed, Aug 22, 2012 at 5:47 PM, Fabiano Faver far...@gmail.com wrote: I changed the previous model a little: MODEL: db.define_table('erro_impressora', Field('descricao','string'), Field('nivel', 'integer' ) ) Controllers: def teste(): rows = db(db.erro_impressora).select() return dict(rows=rows) def update_nivel(): for key, value in request.post_vars: try: db.erro_impressora[key].update_record(nivel=value) except: pass db.commit() redirect(URL('teste')) VIEW: {{extend 'layout.html'}} form action={{=URL('update_nivel')}} method=POST table {{for row in rows:}} trtd{{=row.descricao}}/tdtd{{= SELECT(0,1, value=row.nivel ) }} {{pass}} trtd colspan='2'{{=INPUT(_type='submit') }}/td/tr /table /form I`ve done what you suggested but i couldn`t put it to update. action update_nivel() is receiving a empty request.post_vars Em quarta-feira, 22 de agosto de 2012 15h36min52s UTC-3, rochacbruno escreveu: You can try something like this: def test(): rows = db(db.test).select() return dict(rows=rows) def update_level(): for key, value in request.post_vars: try: db.table[key].update_record(**level=value) except: # do something if key is invalid. db.commit() redirect(URL TO REDIRECT AFTER UPDATES) # or use ajax Now in views/controller/test.html form action={{=URL(update_level)**}} method=POST table {{for row in rows:}} tr td{{=row.name}}/tdtd *input type=text value= id={{= row.id}} name={{=row.id}} /*/td/tr {{pass}} /table /form On Wed, Aug 22, 2012 at 3:16 PM, Fabiano Faver far...@gmail.com wrote: | name | level | --** test 1 |combobox(0) | test 2 |combobox(1) | test 3 |combobox(0) | | Submit | - -- --