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.