Django rest framework Django DRF DateFilter:按月份筛选日期
我试图在Django DRF视图集中添加日期过滤器 models.py: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')
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')