Criando um campo de pesquisa Django

2,439 views
Skip to first unread message

Rodrigo Boniatti

unread,
Aug 6, 2015, 11:54:22 PM8/6/15
to Django Brasil
Olá, gostaria de desenvolver um campo de pesquisa no Django aonde o usuário digita algo e procura no banco e retorna em uma tabela.

Na minha aplicação tenho dois bancos de dados, um relacional e outro legado.

Não sei por onde começar a desenvolver essa pesquisa, alguém pode me ajudar?

Fabio C. Barrionuevo da Luz

unread,
Aug 7, 2015, 12:24:25 AM8/7/15
to django...@googlegroups.com

faça um formulario com um unico campo PESQUISA no html. Faça o formulario submeter via GET ou POST o campo PESQUISA.
faça uma view para obter o dado enviado por esse formulario.
de posse desse dado, faça as pesquisas no seu(s) models.
de posse do resultado, retorne os dados dentro de um template...





--
Você recebeu essa mensagem porque está inscrito no grupo "Django Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para django-brasi...@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.



--
Fábio C. Barrionuevo da Luz
Acadêmico de Sistemas de Informação na Faculdade Católica do Tocantins - FACTO
Palmas - Tocantins - Brasil - América do Sul


Blog colaborativo sobre Python e tecnologias Relacionadas, mantido totalmente no https://github.com/pythonclub/pythonclub.github.io .

Todos são livres para publicar. É só fazer fork, escrever sua postagem e mandar o pull-request. Leia mais sobre como publicar em README.md e contributing.md.
Regra básica de postagem:
"Você" acha interessante? É útil para "você"? Pode ser utilizado com Python ou é útil para quem usa Python? Está esperando o que? Publica logo, que estou louco para ler...

Rodrigo Boniatti

unread,
Aug 7, 2015, 6:49:41 AM8/7/15
to Django Brasil
Valeu Fabio, mas em um banco de dados legado, eu faço como?

Régis Silva

unread,
Aug 7, 2015, 8:36:53 AM8/7/15
to Django Brasil

Rodrigo Boniatti

unread,
Aug 7, 2015, 9:00:23 AM8/7/15
to Django Brasil
Valeu Régis, vou dar uma estudada!


On Friday, August 7, 2015 at 12:54:22 AM UTC-3, Rodrigo Boniatti wrote:

Rodrigo Boniatti

unread,
Aug 7, 2015, 9:03:32 AM8/7/15
to Django Brasil
Régis, por que você chamou a CounterMixin, ListView em sua view?


On Friday, August 7, 2015 at 12:54:22 AM UTC-3, Rodrigo Boniatti wrote:

Rodrigo Boniatti

unread,
Aug 7, 2015, 10:31:45 AM8/7/15
to Django Brasil
Eu fiz aqui, porém na está me retornando resultado nenhum.

Views.py
class ListaUsuario(ListView):
    template_name = 'usuarios.html'
    model = User
    # paginate_by = 100

    def get_queryset(self):
        usuarios = User.objects.all()
        q = self.request.GET.get('pesquisar_por')

        # Buscar por usuário
        if q is not None:
            usuarios = usuarios.filter(username__icontains=q)
        return usuarios

urls.py
url(r'^usuarios/$', ListaUsuario.as_view(), name='ListaUsuario'),


usuarios.html
<div class="col-lg-6">
<form class="input-group" action="." method="get">
<input type="text" name="pesquisar_por" class="form-control" placeholder="Pesquisar por...">
<span class="input-group-btn">
<button class="btn btn-primary" type="submit">Pesquisar</button>
</span>
</form>
</div>

</div>

<div class="table-responsive">
<form method="post" action="">
<table class="table table-striped table-bordered table-list-search sortable">
<thead>
<tr>
<th>#</th>
<th>Username</th>
<th>Email</th>
<th class="sorttable_nosort">Gerenciar</th>
</tr>
</thead>
<tbody>
{% for Usuario in usuarios %}
<tr>
<td>{{Usuario.id}}</td>
<td><a href="/alterar/{{Usuario.id}}">{{Usuario.username}}</a></td>
<td>{{Usuario.email}}</td>
<td>
<div class="btn-group btn-group btn-group-xs">
<a href="/alterar/{{Usuario.id}}" class="btn btn-primary btn-group-sm skill-button-in-table">Alterar</a>
<button type="button" class="btn btn-primary btn-xs dropdown-toggle skill-button-in-table" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<span class="caret"></span>
<span class="sr-only">Toggle Dropdown</span>
</button>
<ul class="dropdown-menu skill-drop-down-menu">
<li>
{# csrf_token #}
{# if user.id != Usuario.id #}
<!-- <input type="submit" name="Excluir" value="{{Usuario.id}}"> -->
{# endif #}
</li>
<li><a class="skill-color-warning" href="#">Desativar</a></li>
<li><a class="skill-color-danger" href="#">Excluir</a></li>
</ul>
</div>
</td>
</tr>
{% empty %}
<div class="alert alert-info" role="alert">
Nenhum resultado foi encotrado.
</div>
{% endfor %}
</tbody>
</table>
</form>
</div>



On Friday, August 7, 2015 at 12:54:22 AM UTC-3, Rodrigo Boniatti wrote:

Régis Silva

unread,
Aug 7, 2015, 10:55:31 AM8/7/15
to django...@googlegroups.com

Não retornou porque?
Deu erro?
Está no GitHub?
Bom, o CounterMixin é porque eu defini um contador.

Rodrigo Boniatti

unread,
Aug 7, 2015, 12:25:46 PM8/7/15
to Django Brasil
Não deu erro, e também não está retornando os resultados.

Rafael dos Santos Gonçalves

unread,
Aug 7, 2015, 12:51:30 PM8/7/15
to django...@googlegroups.com
Rodrigo, o que você errou provavelmente é o nome da variável que vc usou no template(usuarios). A tua view por padrão retorna para o contexto uma variável chamada 'object_list' ou o nome do teu model. Se você quiser usar a variável usuarios coloque isso na sua classe:

class ListaUsuario(ListView):
    template_name = 'usuarios.html'
    model = User
    context_object_name = 'usuarios'
    # paginate_by = 100

    def get_queryset(self):
        usuarios = User.objects.all()
        q = self.request.GET.get('pesquisar_por')

        # Buscar por usuário
        if q is not None:
            usuarios = usuarios.filter(username__icontains=q)
        return usuarios

--
Você recebeu essa mensagem porque está inscrito no grupo "Django Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para django-brasi...@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.



--
Rafael dos Santos Gonçalves
Ramal - 6757

Rodrigo Boniatti

unread,
Aug 7, 2015, 1:27:32 PM8/7/15
to Django Brasil
Era exatamente isso! Obrigado Rafael. Obrigado Régis.


On Friday, August 7, 2015 at 12:54:22 AM UTC-3, Rodrigo Boniatti wrote:
Reply all
Reply to author
Forward
0 new messages