Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django rest framework Django DRF DateFilter:按月份筛选日期_Django Rest Framework_Django Filter - Fatal编程技术网

Django rest framework Django DRF DateFilter:按月份筛选日期

Django rest framework Django DRF DateFilter:按月份筛选日期,django-rest-framework,django-filter,Django Rest Framework,Django Filter,我试图在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')

我试图在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 
过滤器按预期显示在rest框架页面中,但不接受作为整数传递的月份,并返回以下错误

我知道直接在queryset中添加这些过滤器可以解决问题,但是是否可以使用django过滤器库实现这些过滤器


事实上,我找到了问题所在。尽管过滤器适用于日期字段,但在过滤一个月或一般情况下过滤日期部分时,要使用的正确过滤器是使用NumberFilter

事实证明,以下两个表达式都起作用:

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