Фильтры 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')