Django-filter隐藏/删除过滤器字段

时间:2015-01-19 13:28:52

标签: django filter field hide django-filter

我正在使用Alex的Django-filter,我希望从视图中删除过滤器表单中的一些字段。

我正在考虑这样的事情:

for name, field in self.filter.filters.iteritems():      
    if somethink:
        if name == "price":
            field.visible = False

这是我的代码:

过滤器:

import django_filters

class ProductFilter(django_filters.FilterSet):
    class Meta:
        model = Product
        fields = ['price', 'release_date']

然后是SingleTableView:

class ProductTableView(SingleTableView):
  filter_class = ProductFilter


  def get_table_data(self, **kwargs):
    queryset =super(ProductTableView, self).get_table_data()
    self.filter = self.filter_class(self.request.GET,  queryset=queryset)
    return self.filter

  def get_context_data(self, **kwargs):
    context = super(ProductTableView, self).get_context_data(**kwargs)

    for name, field in self.filter.filters.iteritems():      
        if somethink:
            if name == "price":
                field.visible = False

    context['filter'] = self.filter
    return context

我知道我可以在模板中做到这一点,但对我来说这是更好的选择。我需要基于用户角色的更改过滤器

1 个答案:

答案 0 :(得分:0)

我没有看到你在这里猜测的所有代码,但是你是否试过通过Meta类指定要过滤的字段?

import django_filters

class ProductFilter(django_filters.FilterSet):
    class Meta:
        model = Product
        fields = ['price', 'release_date']

然后在你看来:

def product_list(request):
    f = ProductFilter(request.GET, queryset=Product.objects.all())
    return render_to_response('my_app/template.html', {'filter': f})

这样只会过滤/​​查看pricerelease_date字段。

链接到relevant documentation