首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django DRF DateFilter:按月过滤日期

Django DRF DateFilter:按月过滤日期
EN

Stack Overflow用户
提问于 2020-02-10 06:50:02
回答 1查看 717关注 0票数 0

我正在尝试在Django DRF视图集上添加日期过滤器

models.py:

代码语言:javascript
复制
class Day(models.Model):
    date = models.DateField(unique=True)
    ...

在视图中,我添加了一个过滤器集,如下所示:

代码语言:javascript
复制
class DateFilter(filters.FilterSet):
    month = filters.DateFilter(field_name='date__month', lookup_expr='exact')

    class Meta:
        model = Day
        fields = ['month']

我还试图定义月份过滤器,如下所示,但也出现了同样的错误:

代码语言:javascript
复制
month = filters.DateFilter(field_name='date', lookup_expr='month')

并添加到视图集中:

代码语言:javascript
复制
class DayViewSet( mixins.ListModelMixin, mixins.RetrieveModelMixin, GenericViewSet):
    queryset = Day.objects.all().order_by('-date')
    serializer_class = DaySummarySerializer
    lookup_field = 'slug'
    filter_backends = [filters.DjangoFilterBackend]
    filterset_class = DateFilter 

过滤器按预期出现在rest框架页面中,但不接受将月份作为整数传递,并返回以下错误。

我知道可以通过直接在查询集中添加这些过滤器来解决这个问题,但是是否可以使用django-filter库来实现这样的过滤器呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-10 20:59:46

实际上我设法找到了问题所在。尽管筛选器适用于日期字段,但在筛选一个月或一般日期部分时,要使用的正确筛选器是使用NumberFilter

事实证明,下面的两个表达式都有效:

代码语言:javascript
复制
date_month = filters.NumberFilter(field_name='date__month', lookup_expr='exact')
date_month = filters.NumberFilter(field_name='date', lookup_expr='month')
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60142082

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档