es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

django, límite generics.ListAPIView por semana del campo de filtro ingresado por el usuario

Nuevo en Django y comenzando con una API. Me gustaría que mi vista acepte un campo de conjunto de filtros y luego devuelva los datos dentro de una semana mayor a ese campo. La vista que he configurado actualmente es:
views.py

class MeterView(generics.ListAPIView):

    queryset = MeterLake.objects.all()
    serializer_class = MeterLakeSerializer
    filter_backends = [DjangoFilterBackend]
    filterset_fields = {& # 39; siteid & amp; # 39;: [& amp; # 39; exact & amp; # 39;],
                            & # 39; createdtimestamp & amp; # 39 ;: [& # 39; gte & # 39;],

                            }

luego el usuario ingresar url /?createdtimestamp=fecha
Luego me gustaría tomar la fecha ingresada por el usuario y devolver información mayor a una semana de esa fecha.

Idealmente, me gustaría usar la paginación para esto, pero no estoy seguro de cómo hacerlo.
¡Cualquier ayuda es muy apreciada!

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Puedes usar DjangoFilterBackend para filtrar los datos basados en el campo createdtimestamp. Para retornar los datos dentro de una semana mayor a la fecha ingresada por el usuario, puedes usar el filtro lte (menor o igual) en el diccionario filterset_fields.

    Por ejemplo, si el usuario ingresa ?createdtimestamp=date, puedes usar el siguiente código en el diccionario filterset_fields:

    filterset_fields = {
        'siteid' : ['exact'], 
        'createdtimestamp' : ['gte', 'lte'],
    }
    

    Esto retornará los datos con createdtimestamp mayor o igual a la fecha ingresada por el usuario y menor o igual a una semana después de la fecha ingresada por el usuario.

    También puedes usar la paginación para retornar los datos. Para hacer esto, puedes usar la clase PageNumberPagination de la librería rest_framework. Por ejemplo:

    from rest_framework.pagination import PageNumberPagination
    
    class MeterView(generics.ListAPIView):
        queryset = MeterLake.objects.all()
        serializer_class = MeterLakeSerializer
        filter_backends = [DjangoFilterBackend]
        filterset_fields = {'siteid' : ['exact'], 
                            'createdtimestamp' : ['gte', 'lte'],
                            }
        pagination_class = PageNumberPagination
    

    Esto habilitará la paginación para la vista. También puedes especificar el tamaño de la página configurando el atributo page_size en la clase PageNumberPagination.

    Para obtener más información, puedes consultar la documentación de Django REST Framework.

Comments are closed.