1
resposta

Receita.objects.get ou get_object_or_404?

Nas funções anteriores do arquivo views.py, utilizamos bastante a função get_object_or_404 (inclusive no método edita_receita), passando como parâmetro a classe Receita e o receita_id como primary key. No entanto, nesse curso utilizamos a função Receita.objects.get na hora de atualizar a receita no banco de dados, passando como parâmetro somente o receita_id, sem a classe Receita

Essas duas funções fazem a mesma coisa? Quando devo utilizar uma ou outra?

PS: Peço perdão se o ideal for utilizar blocos de código no lugar de texto em itálico, é a minha primeira pergunta no fórum da Alura

1 resposta

Olá Lucas, tudo bem com você?

Peço desculpas pela demora em lhe responder.

Quando usamos o método get_object_or_404 estamos aplicando o método get() em determinado modelo, no nosso caso, no modelo Receita, buscando no modelo seus objetos retornando o resultado em uma lista, caso esse modelo não seja encontrado será levantado a exceção 404.

Quando usamos a seguinte sintaxe Receita.objects.get() estamos buscando um objeto que pertence ao modelo Receita, nesse caso, informamos uma referência para encontrarmos esse objeto, usamos o id por ser um valor único, como apresentado abaixo.

r =Receita.objects.get(pk=receita_id)

No modo acima não estamos fazendo um tratamento de erro ou de exceção. Caso o objeto não seja encontrado será levantado o erro DoesNotExist, caso por algum motivo seja encontrado objetos duplicados, será levantado o erro MultipleObjectsReturned.

Os dois modos possuem objetivo de buscar objetos em um modelo, o primeiro (get_object_or_404) será usado no momento em que queremos buscar todos os objetos retornando-os em uma lista, já o segundo modo (Receita.objects.get()) usamos quando queremos um objeto em específico de um modelo.

Fico à disposição em caso de dúvidas.

Abraços e bons estudos.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

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