0

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'

mailman_73
  • 778
  • 12
  • 29

2 Answers2

2

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
AKS
  • 18,983
  • 3
  • 43
  • 54
beCurious
  • 152
  • 7
1

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
Dhia Shalabi
  • 1,332
  • 1
  • 13
  • 29