如何在 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
这是我的观点:
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