python - OrderingFilter has no attribute 'filter_queryset' -


i have been trying orderingfilter work. example in django-rest-framework's page, seems should straightforward:

class userlistview(generics.listapiview):     queryset = user.objects.all()     serializer_class = userserializer     filter_backends = (filters.orderingfilter,)     ordering_fields = ('username', 'email') 

however, when try that:

from django_filters.rest_framework import djangofilterbackend, filterset, orderingfilter ...   class listingviewset(viewsets.modelviewset):     queryset = listing.objects.all()     serializer_class = listingserializer     filter_backends = (djangofilterbackend, orderingfilter,)     filter_class = listfilter     ordering_fields = ('price', 'views')     ordering = ('price',) 

i error orderingfilter not having filter_queryset attribute:

error 2016-11-13 03:14:57,304 log 25913 123145338523648 (<class 'attributeerror'>, attributeerror("'orderingfilter' object has no attribute 'filter_queryset'",), <traceback object @ 0x106ef48c8>) traceback (most recent call last):   file "/.../lib/python3.5/site-packages/rest_framework/views.py", line 474, in dispatch     response = handler(request, *args, **kwargs)   file "/.../lib/python3.5/site-packages/rest_framework/mixins.py", line 40, in list     queryset = self.filter_queryset(self.get_queryset())   file "/.../lib/python3.5/site-packages/rest_framework/generics.py", line 151, in filter_queryset     queryset = backend().filter_queryset(self.request, queryset, self) attributeerror: 'orderingfilter' object has no attribute 'filter_queryset' 

going orderingfilter, indeed not have filter_queryset method, view expects it:

# in genericapiview(views.apiview) def filter_queryset(self, queryset):     """     given queryset, filter whichever filter backend in use.      unlikely want override method, although may need     call either list view, or custom `get_object`     method if want apply configured filtering backend     default queryset.     """     backend in list(self.filter_backends):         queryset = backend().filter_queryset(self.request, queryset, self)     return queryset 

i have tried various solutions in django rest framework queryset doesn't order, seems not work, either. tried updating promising answer:

class your_view_set(viewsets.modelviewset):     #your code here     ordering_filter = orderingfilter()      def filter_queryset(self, queryset):         queryset = super(your_view_set, self).filter_queryset(queryset)         return self.ordering_filter.filter_queryset(self.request, queryset, self) 

since orderingfilter not have filter_queryset method, changed filter_queryset filter (which have), call seems clash signature of filter in orderingfilter:

# in orderingfilter(basecsvfilter, choicefilter) def filter(self, qs, value):     if value in empty_values:         return qs      ordering = [self.get_ordering_value(param) param in value]     return qs.order_by(*ordering) 

i have no idea value in function declaration supposed try pass function, seems qs refers queryset, assume should first argument instead of second, again, not entirely sure value be; doesn't seem request because not iterable.

i appreciate pointers or ideas, or workarounds, , apologize if missed obvious; not terribly familiar django.

just ran myself!

don't use class django_filters, use rest_framework.filters.orderingfilter instead.

from rest_framework.filters import orderingfilter django_filters.rest_framework import djangofilterbackend, filterset ... 

Comments

Popular posts from this blog

php - How to display all orders for a single product showing the most recent first? Woocommerce -

asp.net - How to correctly use QUERY_STRING in ISAPI rewrite? -

angularjs - How restrict admin panel using in backend laravel and admin panel on angular? -