Django DRF DateFilter: фильтрация дат по месяцам - PullRequest
0 голосов
/ 10 февраля 2020

Я пытаюсь добавить фильтры даты в Django DRF viewset

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?

Filter

Error

1 Ответ

0 голосов
/ 10 февраля 2020

На самом деле мне удалось найти проблему. Несмотря на то, что фильтр применяется к полю даты, правильный фильтр для использования при фильтрации по месяцу или вообще по части даты должен использовать NumberFilter.

. Оказывается, что оба Выражение под работой:

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