【问题标题】:how to use django-filters on django-tables2如何在 django-tables2 上使用 django-filters
【发布时间】:2018-03-29 13:35:54
【问题描述】:

这是我的看法:

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显示数据。

我怎样才能得到这一切?我想定义我的 custum 表数据并且让我定义的过滤器对其进行处理。

【问题讨论】:

    标签: django python-3.x django-class-based-views django-tables2 django-filters


    【解决方案1】:

    好吧,我自己想通了……

    我不得不覆盖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
    

    【讨论】:

      【解决方案2】:

      您是否尝试过将table_data 属性添加到类而不是覆盖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')
      

      【讨论】:

      • 赋予 'PersonalView' 对象没有属性 'super' 没关系,我已经找到了解决方案。见下文。不过,感谢您的努力! :)
      • 当然,super 是内置函数,只是在这里做了一个“错字”。编辑了我的anwser,希望有效;)
      • 不,它给出了:'InvoiceFilter' 对象没有属性 'filter' 无论如何,就像我说的,我用 get_queryset 解决了它。 (只是还不能接受我自己的答案)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-08-13
      • 2021-12-27
      • 2022-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多