Saltar al contenido

rango de fechas en un filtro Django

Santiago, miembro de nuestro equipo, nos ha hecho el favor de redactar este escrito porque controla a la perfección este tema.

Solución:

No puedo hablar sobre la parte de Django REST Framework de su pregunta, ¡pero espero poder brindarle una idea de la parte del filtro Django!

Si usa un DateRangeFilter, el resultado sería un menú desplegable con las opciones “cualquier fecha”, “hoy”, “últimos 7 días”, “este mes” y “este año”.

Si su variable es ‘fecha’, cualquiera de estos le dará un rango de fechas con la etiqueta “Rango de fechas”:

date_range = DateRangeFilter(field_name='date')
date = DateRangeFilter(label='Date_Range')

La diferencia es que si usa el primero, puede usar su variable “fecha” nuevamente, por lo que podría darle a su usuario la opción de filtrar por fecha de inicio, fecha de finalización o ambas (para obtener fechas intermedias), todo usando el misma variable de fecha.

(Solo puede usar “fecha” a la izquierda del signo igual una vez (o nunca)).

Para obtener la fecha de inicio y finalización, haga lo siguiente:

start_date = DateFilter(field_name='date',lookup_expr=('lt'),) 
end_date = DateFilter(field_name='date',lookup_expr=('gt'))

No necesita volver a llamar a “fecha” en Meta, pero puede hacerlo. Tienes que llamar a algo. Podría ser su fecha o algún otro campo que desee filtrar.

Aquí hay un código completo y un ejemplo de captura de pantalla:

from django_filters import DateRangeFilter,DateFilter
from wesapp.models import MyModel

class SaleItemFilter(django_filters.FilterSet):
    start_date = DateFilter(name='date',lookup_type=('gt'),) 
    end_date = DateFilter(name='date',lookup_type=('lt'))
    date_range = DateRangeFilter(name='date')

    class Meta:
        model = SaleItem
        fields = ['entered_by',]

ingrese la descripción de la imagen aquí

Sé que esta es una publicación anterior, pero para dar una respuesta adicional, puede habilitar desde y hasta el selector de fecha también mediante el siguiente método. Selector de fecha usando django_filters.

import django_filters
from django_filters.widgets import RangeWidget

Date = django_filters.DateFromToRangeFilter(widget=RangeWidget(attrs='type': 'date'))

También podrías probar el DateFromToRangeFilter
Esto le permitiría hacer esto:

f = F('date_0': '2016-01-01', 'date_1': '2016-02-01')

Donde F es un FilterSet clase con date = DateFromToRangeFilter

https://django-filter.readthedocs.io/en/stable/ref/widgets.html#rangewidget

Al final de la artículo puedes encontrar las crónicas de otros usuarios, tú incluso puedes dejar el tuyo si dominas el tema.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *