我正在使用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
我知道我可以在模板中做到这一点,但对我来说这是更好的选择。我需要基于用户角色的更改过滤器
答案 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})
这样只会过滤/查看price
和release_date
字段。