2
respostas

Filtrar no endpoint utilizando o __in do ORM do django

Bom dia,

É possível realizar um filtro num endpoint utilizando o __in=[]? Para exemplificar segue uma classe que tem um choices com atributo

class Agendamento(Base):
    """Classe para gerenciamento do agendamento"""

    SOLICITADO = 3
    AGENDADO = 2
    CONFIRMADO = 1
    FINALIZADO = 4
    CANCELADO = 5
    NAO_COMPARECEU = 6

    CHOICE_ETAPAS = [
        (SOLICITADO, "Solicitado"),
        (AGENDADO, "Agendando"),
        (CONFIRMADO, "Confirmado"),
        (CANCELADO, "Cancelado"),
        (FINALIZADO, "Finalizado"),
        (NAO_COMPARECEU, "Não Compareceu"),
    ]
   ...
    etapa = models.PositiveIntegerField("Status", choices=CHOICE_ETAPAS, default="2")

Tendo esse model eu tenho o viewset:

class AgendamentoGetAPI(OptimizedQuerySetMixin, ReadOnlyModelViewSet):
    """
    Classe para retorno dos dados para quando o usuário precisa determinar quais os campos devem ser retornados
    Apenas para métodos GET
    """
    pagination_class = AgendamentoGetSerializarPagination
    queryset = Agendamento.objects.select_related().all()
    serializer_class = AgendamentoGetSerializer
    filter_backend = [filters.SearchFilter]
    filterset_fields = [... , 'etapa', ... ]
    search_fields = ['fk_cliente', 'fk_profissional', 'etapa']
`

Veja que coloquei no filterset_fields o campo etapa. Gostaria agora de filtrar todos os registrs que a etapa seja 1 ou 3, como faço isso?

2 respostas

Oi, tudo bem?

Separe os valores por vírgulas, sem colocar colchetes, por ex:

?campo__in=1,3

Tentei como falou, mas não retorna.