简体   繁体   English

django-datatables-view 加载过滤模型

[英]django-datatables-view load filtered model

Here we have the basic code for getting django-datatables-view to display这里我们有让 django-datatables-view 显示的基本代码

from django_datatables_view.base_datatable_view import BaseDatatableView

class OrderListJson(BaseDatatableView):
    # The model we're going to show
    model = MyModel

    # define the columns that will be returned
    columns = ['number', 'user', 'state', 'created', 'modified']

    # define column names that will be used in sorting
    # order is important and should be same as order of columns
    # displayed by datatables. For non sortable columns use empty
    # value like ''
    order_columns = ['number', 'user', 'state', '', '']

    # set max limit of records returned, this is used to protect our site if someone tries to attack our site
    # and make it return huge amount of data
    max_display_length = 500

    def render_column(self, row, column):
        # We want to render user as a custom column
        if column == 'user':
            return '{0} {1}'.format(row.customer_firstname, row.customer_lastname)
        else:
            return super(OrderListJson, self).render_column(row, column)

    def filter_queryset(self, qs):
        # use parameters passed in GET request to filter queryset

        # simple example:
        search = self.request.GET.get(u'search[value]', None)
        if search:
            qs = qs.filter(name__istartswith=search)

        # more advanced example using extra parameters
        filter_customer = self.request.GET.get(u'customer', None)

        if filter_customer:
            customer_parts = filter_customer.split(' ')
            qs_params = None
            for part in customer_parts:
                q = Q(customer_firstname__istartswith=part)|Q(customer_lastname__istartswith=part)
                qs_params = qs_params | q if qs_params else q
            qs = qs.filter(qs_params)
        return qs

This code works fine, however, how do I get it to not display the whole model, but only filtered content from the model?这段代码工作正常,但是,如何让它不显示整个模型,而只显示模型中的过滤内容? I've tried setting it to model = MyModel.objects.filter(name="example") but this returns an error.我尝试将其设置为model = MyModel.objects.filter(name="example")但这会返回错误。

def get_initial_queryset(self):
     return MyModel.objects.filter(name="example")

Add this in your Class OrderListJson将此添加到您的类OrderListJson

您可以使用get_initial_queryset方法返回用于填充数据表的查询集。

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

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