Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Código não performático

Analisando o código criado na aula, não acho performático, no meu entendimento como programador profissional, eu tenho que já trazer os registros já filtrados que eu quero, direto do banco de dados e não fazer da forma que foi criado no código, pois pensando em uma aplicação real, teriámos problema com isso, pois se houver centenas ou milhares de receitas a execução disso seria ruim, pois se o retorno da base de dados trouxer uma quantidade grande de registros para depois fazer um filtro na lista de objetos retornados do banco de dados é muito custoso e lento, como isso fiz o seguinte código:

def buscar(request):
    if 'filtro' in request.GET:
        receitas = Receita.objects.filter(publicada=True).order_by('-data_criacao').filter(nome_receita__icontains=request.GET['filtro'])
        dados = {
            'receitas': receitas
        }
        return render(request, 'buscar.html', dados)
    else:
        return render(request, 'buscar.html')

Da forma que eu fiz já executo o filtro direto no banco, com isso não teremos necessidade de filtrar a lista de objetos.

3 respostas
solução!

e ai Alexsandro, como vai? Muito obrigado por compartilhar o código, excelente observação.

Sugiro dar uma olhada na documentação do Django, onde você pode ler que as buscas só são processadas quando os resultados forem acessados. Nesse link da documentação oficial, é explicitamente comentado que você pode passar o dia todo adicionando novos filtros que isso não afetará a performance da busca final.

César, acho que você não entendeu, pois se eu faço uma busca no banco de dados e o banco de dador me retorna centenas ou milhares de registros, para após eu realizar um filtro nos objetos retornados do banco, isso é muito custoso, então sugerir, colocar o filtro para ser pesquisado diretamente no SGBD, pois isso economiza processamento e não precisarei mais fazer filtro em OBJETOS. Abraço!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software