Bom dia.
Gostaria de uma explicação de quando devo utilizar as @actions do DRF. Eu tenho o seguinte cenário:
class Profissional(Usuario):
CHOICES_TIPO_CONTA = (('Conta Corrente', 'Conta Corrente'), ('Conta Poupança', 'Conta Poupança'))
...
favorito_clientes = models.ManyToManyField(Cliente, blank=True)
...
class Cliente(Usuario):
""" Classe para gerenciar os dados dos clientes da plataforma
"""
endereco_res = models.TextField('Endereço Residencial', blank=True, null=True)
endereco_com = models.TextField('Endereço Comercial', blank=True, null=True)
O sistema deve permitir que um cliente "favorite" um ou mais profissional(ais), o que eu fiz foi implementar uma @action na ModelViewSet de Profissional, ficando o código assim:
class ProfissionalViewAPI(OptimizedQuerySetMixin, ModelViewSet):
queryset = Profissional.objects.select_related().filter(aprovado=True)
filter_backends = [filters.SearchFilter, DjangoFilterBackend]
filterset_fields = ['categoria', 'email', 'cpf', 'nome']
search_fields = ['nome', 'email', 'categoria', 'categoria__nome']
@action(methods=['post'], detail=False)
def marcar_favorito(self, request, format=None):
try:
...
except Exception as error:
return Response({'error': error}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
Minha dúvida é se essa abordagem é a correta a ser adota, ou se eu deveria implementar uma views na API específica para atender a essa ação do cliente (mobile).