Utilizando ListAPIView com get_queryset percebi que a chamada é executada duas vezes tem alguma forma de evitar esse. Estou tentando realizar uma chamada de api no fluxo
Utilizando ListAPIView com get_queryset percebi que a chamada é executada duas vezes tem alguma forma de evitar esse. Estou tentando realizar uma chamada de api no fluxo
Olá, Leandro.
Tudo bem?
Esse comportamento pode ocorrer devido a diversas razões, como middleware ou mixins adicionais que você pode estar usando. Aqui estão algumas dicas que podem ajudar a mitigar esse problema:
Verifique Middleware e Mixins: Certifique-se de que não há middleware ou mixins adicionais que possam estar interferindo na execução da sua view.
Override do Método list
: Uma abordagem é sobrescrever o método list
da sua ListAPIView
, assim você pode controlar melhor quando o queryset
é chamado.
from rest_framework.response import Response
class ListaMatriculasAluno(generics.ListAPIView):
"""Listando as matrículas de um aluno ou aluna"""
serializer_class = ListaMatriculasAlunoSerializer
def get_queryset(self):
queryset = Matricula.objects.filter(aluno_id=self.kwargs['pk'])
return queryset
def list(self, request, *args, **kwargs):
queryset = self.get_queryset()
serializer = self.get_serializer(queryset, many=True)
return Response(serializer.data)
Cache do Queryset: Outra técnica é armazenar o queryset
em uma variável de instância para evitar múltiplas chamadas.
class ListaMatriculasAluno(generics.ListAPIView):
"""Listando as matrículas de um aluno ou aluna"""
serializer_class = ListaMatriculasAlunoSerializer
_queryset = None
def get_queryset(self):
if self._queryset is None:
self._queryset = Matricula.objects.filter(aluno_id=self.kwargs['pk'])
return self._queryset
Essas abordagens devem ajudar a evitar chamadas duplicadas ao get_queryset
. Teste cada uma delas para ver qual se adapta melhor ao seu caso.
Espero ter ajudado. Qualquer dúvida manda aqui. Bons estudos.