Фильтры Django просто возвращают все объекты

У меня есть такая модель

class Research(models.Model): 
    CATEGORIES = (...)

    name = models.CharField(max_length=80)
    date = models.DateField()  
    category = models.CharField(max_length=10, choices=CATEGORIES)
    public_use = models.CharField(max_length=17, choices=PUBLIC_USE_CHOICES)

Этот фильтр:

class ResarchFilter(filters.FilterSet):
    year = filters.DateFilter(field_name='date', lookup_expr='year')
    category = filters.CharFilter(field_name='category', lookup_expr='iexact')
    
    class Meta:
        model = Research
        fields = ['date', 'category']

И это мнение:

class ResarchCategoryYear(generics.ListCreateAPIView):
    queryset = Research.objects.all()
    serializer_class = ResearchSerializer
    filter_backends = (filters.DjangoFilterBackend,)
    # filterset_fields = ['date', 'category']
    filter_class = ResarchFilter

Итак, когда я не комментирую filterset_fields и комментирую filter_class, все работает хорошо, но я не могу фильтровать по году, а не по полной дате. И когда я делаю это как в коде выше и перехожу к http://127.0.0.1:8000/...?year=2000. Это буквально ничего не делает, просто дает мне все объекты Research. Что я делаю не так и как включить эту фильтрацию?

В django-filter docs они создают фильтр года из поля даты как numberfilter, а не как фильтр даты - что имеет определенный смысл, поскольку вы берете целое число (год) из контекста даты

Так что вам может повезти больше:

year = filters.NumberFilter(field_name='date', lookup_expr='year')
Вернуться на верх