在django-datatables-view中创建一个过滤器

时间:2016-04-27 14:21:00

标签: python django datatable datatables django-datatable

我使用django-datatables-view来渲染一个巨大的数据集。 我尝试过滤'flat_price'。它应该小于或等于用户在输入字段中写入的数字

这是我的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)

我无法理解filter_queryset的工作原理。当我尝试使用AttributeError遇到的数据表加载页面时:'NoneType object has no attribute count'

2 个答案:

答案 0 :(得分:2)

filter_queryset应该返回queryset

在您的代码中,filter_queryset(self, qs)不会返回任何数据。 因此,OrderListJson.get()使用NoneType作为查询集

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

答案 1 :(得分:1)

您应该返回过滤后的查询

    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

将 field1 和 field2 替换为您希望它们可搜索的模态字段。 ** Q 是从 **

from django.db.models import Q