Manter opção selecionada <selecte>

1 view
Skip to first unread message

Wagner Porto

unread,
Nov 10, 2009, 5:40:27 AM11/10/09
to Django Brasil
Olá pessoal,
estou com um problema e não estou conseguindo resolver,

Tenho um formulario de pesquisa em um template html com o seguinte
trecho abaixo,
quando o sistema realiza a pesquisa e exibe o grid com o resultado, eu
não consigo
manter os parametros selecionados para a realização da pesquisa que
estão em campos
do tipo <select>, os campos do tipo input está OK.

...
<label for="departamento" id="lblDepartamento">
<span class="campo">Departamento:</span>
<select name="departamento" id="departamento">
<option value=0></option>
{% for depto in departamentos %}
{% ifequal departamento depto.0 %}
<option value={{depto.0}} selected="true">{{depto.1}}</
option>
{% else %}
<option value={{depto.0}}>{{depto.1}}</option>
{% endifequal %}
{% endfor %}
</select>
</label>
...

Obrigado.

Luciano Ramalho

unread,
Nov 10, 2009, 6:04:57 AM11/10/09
to django...@googlegroups.com
Wagner, até hoje eu nunca precisei montar manualmente como você está
fazendo o HTML dos elementos de um form (exceto quando estava criando
um widget novo). Eu sugiro que você use as classes do módulo form do
Django e deixe ele montar os controles do form para você. Assim eles
sempre vão mostrar os valores corretamente.

[ ]s
Luciano

2009/11/10 Wagner Porto <por...@gmail.com>:

Valder Gallo

unread,
Nov 10, 2009, 6:07:11 AM11/10/09
to django...@googlegroups.com
Olá Wagner.

Acredito que o problema seja o seguinte.
Quando vc usa o for em departamentos vc tem que pegar o depto direto.
Bom, não sei como vc montou o departamentos.
O que vc pode usar para ficar melhor o código é colocar, depto.name,
depto.setor ... E não depto.0, depto.1, depto.2

Porém se não for isso, é bem mais simples o selected=true não funciona
por padrão. Use sempre selected=selected.
E o ifequal vc pode usar para exibir apenas o selected que fica mais
limpo o código.


<select name="departamento" id="departamento">
<option value='0'>Selecione</option>
{% for depto in departamentos %}

<option value={{depto}}{% ifequal departamento depto %}
selected="selected" {% endifequal%}> {{depto}} </option>

{% endfor %}
</select>

Wagner Porto

unread,
Nov 10, 2009, 8:28:06 AM11/10/09
to Django Brasil
Obrigado a todos,

quando dou um submit no form,
no arquivo views.py coleto os dados para realizar a pesquisa.

departamento = request.POST.get('departamento','')

realizo a consulta informando o departamento e
envio o resultado eo parametro da consulta para o template.

render_to_response("Pesquisa.html",
{"departamentos":departamentos,
"departamento":departamento})

a variavel departamento receber um inteiro.

tem como fazer algo tipo {% ifequal departamento int(depto) %}

Obrigado.

Wagner Porto

unread,
Nov 10, 2009, 8:39:20 AM11/10/09
to Django Brasil
Olá,
eu fiz um teste informando direto
o codigo do departamento no template e assim deu certo.

Será necessário algum tipo de cast() ?

segue teste abaixo.

Obrigado.

<select name="departamento" id="departamento">
<option value='0'>Selecione</option>
{% for depto in departamentos %}

<option value={{depto.codigo}}{% ifequal 71 depto.codigo %}
selected="selected" {% endifequal%}> {{depto.descricao}} </option>

{% endfor %}
</select>
Reply all
Reply to author
Forward
0 new messages