如何在 django-tables2 上使用 django-filters

how to use django-filters on django-tables2

这是我的观点:

class PersonalView(SingleTableMixin, FilterView):
    model = Invoice
    template_name = 'invProj/index.html'
    table_class = InvoiceTable
    filterset_class = InvoiceFilter
    context_object_name = 'invoice'
    ordering = ['invoice_due_date']

    def get_table_data(self):
        return Invoice.objects.filter(invoice_owner__username=self.request.user).order_by('i
nvoice_due_date')

现在,get_table_data 做对了,发票是根据用户过滤的。但是,InvoiceFilter(django_filters.FilterSet) 不起作用。它 确实 工作,但是,当我不覆盖 get_table_data.

现在,正常显示并正常通过的过滤器只是不过滤。它总是根据 get_table_data 显示数据,无论我输入哪个过滤字符串。

我怎样才能得到这一切?我想定义我的自定义 table 数据 让我定义的过滤器对其起作用。

您是否尝试过将 table_data 属性添加到 class 而不是覆盖 get_table_data

编辑: 我认为你应该重写 get_filterset 函数。像这样:

    def get_filterset(self, filterset_class):
        filterset = super().get_filterset(filterset_class)
        return filterset.filter(invoice_owner__username=self.request.user).order_by('i
nvoice_due_date')

现在好了,我自己弄明白了...

我不得不覆盖 get_queryset 而不是覆盖 get_table_data ,就像这样

def get_queryset(self):
    qs = Invoice.objects.filter(invoice_owner__username=self.request.user).order_by('invoice_due_date')
    return qs