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',]
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.