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="1"><option value="0">0</option><option
> selected="selected" value="1">1</option></select>
>
> Adapting to your case:
>
> {{for row in rows:}}
> <tr><td>{{=row.descricao}}</td><td>{{=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 <[email protected]<javascript:>
> > 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:}}
>> <tr><td>{{=row.descricao}}</td><td>{{= SELECT(0,1,
>> value=row.nivel ) }}
>> {{pass}}
>> <tr><td 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}}</td><td> *<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 <[email protected]> wrote:
>>>
>>>> | name | level |
>>>> ------------------------------**----
>>>> test 1 | combobox(0) |
>>>> test 2 | combobox(1) |
>>>> test 3 | combobox(0) |
>>>> ________
>>>> | Submit |
>>>> -------------
>>>>
>>>
>>> --
>>
>>
>>
>>
>
>
--