我正在尝试在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框架页面中,但不接受将月份作为整数传递,并返回以下错误。
我知道可以通过直接在查询集中添加这些过滤器来解决这个问题,但是是否可以使用django-filter库来实现这样的过滤器呢?


发布于 2020-02-10 20:59:46
实际上我设法找到了问题所在。尽管筛选器适用于日期字段,但在筛选一个月或一般日期部分时,要使用的正确筛选器是使用NumberFilter。
事实证明,下面的两个表达式都有效:
date_month = filters.NumberFilter(field_name='date__month', lookup_expr='exact')
date_month = filters.NumberFilter(field_name='date', lookup_expr='month')https://stackoverflow.com/questions/60142082
复制相似问题