简体   繁体   English

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

[英]create a filter in django-datatables-view

I use django-datatables-view to render a huge dataset.我使用 django-datatables-view 来渲染一个巨大的数据集。 I try to filter 'flat_price' .我尝试过滤'flat_price' It should be less or equal than a number that user writes in an input field它应该小于或等于用户在输入字段中写入的数字

That's my DataTablesView:那是我的 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.我不明白 filter_queryset 是如何工作的。 When I try to load page with the datatable I've encountered with AttributeError : 'NoneType object has no attribute count'当我尝试使用数据表加载页面时,我遇到了AttributeError'NoneType object has no attribute count'

filter_queryset should return queryset . filter_queryset应该返回queryset

In your code, filter_queryset(self, qs) does not return any data.在您的代码中, filter_queryset(self, qs)不返回任何数据。 so, OrderListJson.get() use NoneType as a queryset所以, 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

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.将 field1 和 field2 替换为您希望它们可搜索的模态字段。 ** Q is imported from ** ** Q 是从 ** 导入的

from django.db.models import Q

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM