Django-filter: La integración de DRF no funciona para acciones de conjuntos de vistas adicionales

Creado en 16 ago. 2018  ·  9Comentarios  ·  Fuente: carltongibson/django-filter

Tengo varias acciones de lista en un solo conjunto de vistas utilizando el decorador @action como se describe aquí y he incluido un FilterSet a través de filter_class como se especifica en los documentos aquí . Los filtros solo se aplican a las acciones predeterminadas de ViewSet List y Retrieve y no a ninguna de las acciones personalizadas de List o Retrieve, que es donde realmente necesitamos los filtros.

Comentario más útil

Lo hice funcionar simplemente moviendo la llamada de la siguiente manera

@action(methods=['GET'], detail=False)
def simplelist(self, request, *args, **kwargs):
    qs = self.filter_queryset(self.get_queryset())
    serializer = SpecializedModelListSerializer(qs, many=True)
    return Response(serializer.data, status=status.HTTP_200_OK)

¡¡¡Gracias por la ayuda!!!

Todos 9 comentarios

Hola @estianross. Debe proporcionar más detalles si vamos a poder comentar.

¿Estás seguro de que tus acciones adicionales están llamando filter_queryset() ?

Lo hacen, pero estoy bastante seguro de que no lo estoy usando de la forma en que debería usarse si ese es el problema. He incluido una acción de muestra simple a continuación para mostrar los conceptos básicos de lo que estoy haciendo en estas acciones.

@action(methods=['GET'], detail=False)
def simplelist(self, request, *args, **kwargs):
    serializer = SpecializedModelListSerializer(self.filter_queryset(self.get_queryset()), many=True)
        return Response(serializer.data, status=status.HTTP_200_OK)

Le sugiero que cree un APITestCase y conecte la URL + los parámetros de consulta que espera. Luego podrá hacer afirmaciones e insertar puntos de interrupción según sea necesario para ver dónde le van mal las cosas.

(Me temo que sin mucho más detalle es imposible poder aconsejar en absoluto).

Lo hice funcionar simplemente moviendo la llamada de la siguiente manera

@action(methods=['GET'], detail=False)
def simplelist(self, request, *args, **kwargs):
    qs = self.filter_queryset(self.get_queryset())
    serializer = SpecializedModelListSerializer(qs, many=True)
    return Response(serializer.data, status=status.HTTP_200_OK)

¡¡¡Gracias por la ayuda!!!

Esto no parece funcionar en la mayoría de mis casos.

Creo que se debe reabrir este tema. Tengo el mismo problema y me funcionó la solución propuesta.

@action(methods=['get'], detail=True, url_path='retrieve_by_card_no/(< int:CardNo> )')
def getByCarNo(self, request, CardNo):
usuario = get_object_or_404(employe_model, EmpCardNo=CardNo)
Respuesta de retorno (serializadores.EmployeeInfoSerializer(usuario).datos, estado=estado.HTTP_200_OK)

Quiero buscar al empleado por su tarjeta no en lugar de la identificación del empleado

¿alguien puede ayudarme?

Creo que la integración del filtro funciona correctamente si pasa los parámetros de consulta junto con su acción en la URL. A continuación se muestra la acción que tuve

@action(methods=['GET'], detail=False)
def export(self, request): 
    queryset = self.get_queryset()
    filtered_queryset = self.filter_queryset(queryset)

Al intentar llamar a la acción de exportación desde la API navegable de DRF, la solicitud que se enviaba era
/api/viewname/export/ en su lugar debería llamarse como
/api/viewname/export/?query_param_1=valor1&?query_param_2=valor2

Pasar los parámetros de consulta junto con la acción llamará a la clase de conjunto de filtros y, por lo tanto, obtendrá un conjunto de consultas filtrado en la variable filtered_queryset

Muchas gracias lo descubrí

El miércoles 28 de abril de 2021 a las 00:32 Mohammed Sunasra @ . * >
escribió:

Creo que la integración del filtro funciona correctamente si pasas la consulta.
params junto con su acción en la URL. A continuación se muestra la acción que tuve

@action(métodos=['GET'], detalle=Falso)
def exportar(auto, solicitud):
conjunto de consultas = self.get_queryset()
filtered_queryset = self.filter_queryset(queryset)

Al intentar llamar a la acción de exportación desde la API navegable de DRF, la solicitud
que estaba siendo enviado era
/api/viewname/export/ en su lugar debería llamarse como
/api/viewname/export/?query_param_1=valor1&?query_param_2=valor2

Pasar los parámetros de consulta junto con la acción llamará al conjunto de filtros
class y, por lo tanto, obtendrá un conjunto de consultas filtrado en filtered_queryset
variable


Estás recibiendo esto porque comentaste.
Responda a este correo electrónico directamente, véalo en GitHub
https://github.com/carltongibson/django-filter/issues/967#issuecomment-828220562 ,
o darse de baja
https://github.com/notifications/unsubscribe-auth/AMD2QQXC6FGISRWTHRAGUSTTK62Y7ANCNFSM4FP6FMMQ
.

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

madelyneriksen picture madelyneriksen  ·  4Comentarios

nhuzaa picture nhuzaa  ·  3Comentarios

lalzada picture lalzada  ·  3Comentarios

csarcom picture csarcom  ·  3Comentarios

sassanh picture sassanh  ·  4Comentarios