create a filter in django-datatables-view

3.6k Views Asked by At

I use django-datatables-view to render a huge dataset. I try to filter 'flat_price'. It should be less or equal than a number that user writes in an input field

That's my DataTablesView:

class OrderListJson(BaseDatatableView):
    model = Flat
    columns = ['flat_house.adress', 'flat_price',]
    order_columns = ['flat_house.adress', 'flat_price',]
    max_display_length = 100

    def filter_queryset(self, qs):
        search = self.request.GET.get(u'search[value]', None)
        if search:
            qs = qs.filter(flat_price__lte=search)

I can't understand how filter_queryset works. When I try to load page with the datatable I've encountered with AttributeError : 'NoneType object has no attribute count'

2

There are 2 best solutions below

2
On BEST ANSWER

filter_queryset should return queryset.

In your code, filter_queryset(self, qs) does not return any data. so, OrderListJson.get() use NoneType as a queryset

def filter_queryset(self, qs):
    search = self.request.GET.get(u'search[value]', None)
    if search:
        qs = qs.filter(flat_price__lte=search)
    return qs
0
On

You should return the filtered query

    def filter_queryset(self, qs):
        search = self.request.GET.get(u'search[value]', None)
        print(search)
        if search:
            qs = qs.filter(
                Q(field1__icontains=search) |
                Q(field2__icontains=search)
            )
        return qs

replace field1 and field2 with your modal's fields that you want them to be searchable. ** Q is imported from **

from django.db.models import Q