Как фильтровать по полям Date в пакете Django-filter?
Моя модель
class Metric(models.Model):
date = models.DateField()
channel = models.CharField(max_length=50)
country = models.CharField(max_length=10)
os = models.CharField(max_length=10)
Я использую django-filter для фильтрации записей. Может ли кто-нибудь помочь, как я могу фильтровать по временному диапазону (достаточно дата_от+дата_до). Например, в параметре запроса пользователь указывает /metrics?date-gte='2021-08-17'&date-lte='2021-08-19'
моя точка зрения
class MetricViewSet(viewsets.ModelViewSet):
serializer_class = MetricSerializer
queryset = Metric.objects.all()
filter_backends = [DjangoFilterBackend]
filterset_fields = ['country', 'channel','os']
Вместо использования filterset_fields
для автоматического создания набора фильтров задайте его с помощью filterset_class
(Docs) и используйте DateFromToRangeFilter
[django-filter docs] для обеспечения фильтрации по диапазону дат:
from django_filters import rest_framework as filters
class MetricFilter(filters.FilterSet):
date = filters.DateFromToRangeFilter()
class Meta:
model = Metric
fields = ['country', 'channel', 'os', 'date']
class MetricViewSet(viewsets.ModelViewSet):
serializer_class = MetricSerializer
queryset = Metric.objects.all()
filter_backends = [filters.DjangoFilterBackend]
filterset_class = MetricFilter
Вы можете предоставить параметры запроса типа /metrics?date_after=2021-08-17&date_before=2021-08-19
.
Я думаю, что Metric.objects.filter(date__range('2021-08-17', '2021-08-19'))
может справиться с этой задачей? Возможно, вам нужно сначала преобразовать строку даты в объект даты.
Для справки: Range