Fala Raul, como vai?
Esse comportamento mágico ocorre por conta do ViewSet.
Olha o que a documentação diz:
Em vez de escrever seus próprios conjuntos de visualizações, você frequentemente desejará usar as classes base existentes que fornecem um conjunto padrão de comportamento.
Além disso, pontua 2 vantagens de utilizar:
A lógica repetida pode ser combinada em uma única classe. Só precisamos especificar queryset uma vez, e ele será usado em várias visualizações.
Ao usar roteadores, não precisamos mais lidar com a instalação ou especificações da URL.
Em outras palavras, esse id
que não passamos como argumento da função, está incluso em nosso queryset
da classe ViewSet
. Você pode fazer isso na mão? Pode, segue o exemplo sem o uso de Viewset e buscando a pk (chave):
class Receita(APIView):
def get_object(self, pk):
try:
return Receita.objects.get(pk=pk)
except Receita.DoesNotExist:
raise Http404
def get (self, request, pk):
receita = self.get_object(pk)
serializer = ReceitaSerializer(receita)
return Response (serializer.data)
Fez sentido? Deu para ter uma ideia?
: )