I am having big problems here to make it work. It is a very similar case, but my filter field is a foreign field.
I am following up Scott's example, and another approach defining a FilterSet, but none of them works.
It returns an exception: EmptyResultSet, which is kind of funny because the queryset is returned perfectly.
--------------------------------
1st approach
class PublicAdministrationIndicatorPaginated(CacheResponseMixin, CustomReadOnlyModelPaginatedViewSet):
"""
API endpoint that allows to: view, filter, search and order.
Formats allowed: json, api, csv, xml
"""
queryset = PublicAdministrationIndicator.objects.all()
serializer_class = PublicAdministrationIndicatorSerializer
renderer_classes = api_settings.DEFAULT_RENDERER_CLASSES + [PaginatedCSVRenderer, XMLRenderer]
filter_backends = (filters.DjangoFilterBackend, filters.SearchFilter, filters.OrderingFilter,)
filter_fields = ('public_administration', 'public_administration__ine_code', 'public_administration__size', 'public_administration__type', 'public_administration__territory', 'indicator', 'indicator__year', 'has_value')
search_fields = ('public_administration', 'indicator')
ordering_fields = ('public_administration', 'indicator', 'absolute_cons')
def get_queryset(self):
"""
Override get_queryset() to filter on multiple values for 'PublicAdministrationIndicator_indicator__year'
"""
queryset = PublicAdministrationIndicator.objects.all()
years_value = self.request.QUERY_PARAMS.get('indicator__year', None)
if years_value:
year_list = years_value.split(',')
print year_list
queryset = PublicAdministrationIndicator.objects.filter(indicator__year__in=year_list)
print queryset.count() # actually prints a length of queryset of 525917
return queryset
------------------------
2nd approach:
class PublicAdministrationIndicatorFilter(django_filters.FilterSet):
indicator__year = django_filters.ModelMultipleChoiceFilter(
name="indicator_id__year",
queryset=PublicAdministrationIndicator.objects.all(),
lookup_type='in'
)
class Meta:
model = PublicAdministrationIndicator
fields = ('indicator', 'indicator__year',)
class PublicAdministrationIndicatorPaginated(CacheResponseMixin, CustomReadOnlyModelPaginatedViewSet):
"""
API endpoint that allows to: view, filter, search and order.
Formats allowed: json, api, csv, xml
"""
queryset = PublicAdministrationIndicator.objects.all()
serializer_class = PublicAdministrationIndicatorSerializer
renderer_classes = api_settings.DEFAULT_RENDERER_CLASSES + [PaginatedCSVRenderer, XMLRenderer]
filter_backends = (filters.DjangoFilterBackend, filters.SearchFilter, filters.OrderingFilter,)
filter_class = PublicAdministrationIndicatorFilter
search_fields = ('public_administration', 'indicator')
ordering_fields = ('public_administration', 'indicator', 'absolute_cons')
Please, I need to know why is raising that error when the queryset seems to be well computed, and all results are on it.
Cheers,
Miguel