如何按 Django-filter 包中的日期字段进行过滤?
Posted
技术标签:
【中文标题】如何按 Django-filter 包中的日期字段进行过滤?【英文标题】:How to filter by Date fields in Django-filter package? 【发布时间】:2021-10-23 22:22:40 【问题描述】:我的模型
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 过滤记录。有人可以帮助我如何按时间范围过滤(date_from+date_to 就足够了)。就像在查询参数中用户将提供/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']
【问题讨论】:
【参考方案1】:不要使用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
等查询参数。
【讨论】:
感谢它的魅力。你也可以看看这个吗? ***.com/questions/68895105/…【参考方案2】:我认为Metric.objects.filter(date__range('2021-08-17', '2021-08-19'))
可以胜任这项工作吗?也许您需要先将日期字符串转换为日期对象。
供您参考:Range
【讨论】:
以上是关于如何按 Django-filter 包中的日期字段进行过滤?的主要内容,如果未能解决你的问题,请参考以下文章
结合 django-filter DateTimeFromToRangeFilter 和 DateTimeInput(datepicker)