【问题标题】:Django DRF DateFilter: filtering dates by monthsDjango DRF DateFilter:按月过滤日期
【发布时间】:2020-05-25 06:43:46
【问题描述】:

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

models.py:

class Day(models.Model):
    date = models.DateField(unique=True)
    ...

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

class DateFilter(filters.FilterSet):
    month = filters.DateFilter(field_name='date__month', lookup_expr='exact')

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

我也尝试定义月份过滤器,但同样的错误如下:

month = filters.DateFilter(field_name='date', lookup_expr='month')

并在视图集中添加:

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 

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

我知道直接在查询集中添加这些过滤器是可能的解决方法,但是是否可以使用 django-filters 库来实现此类过滤器?

【问题讨论】:

    标签: django-rest-framework django-filter


    【解决方案1】:

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

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

    date_month = filters.NumberFilter(field_name='date__month', lookup_expr='exact')
    date_month = filters.NumberFilter(field_name='date', lookup_expr='month')
    

    【讨论】:

      猜你喜欢
      • 2019-05-31
      • 2022-01-11
      • 1970-01-01
      • 2015-12-15
      • 2019-03-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-22
      • 2014-03-12
      相关资源
      最近更新 更多