Я работаю над проектом Django и хочу знать, как мне сделать так, чтобы поле фильтра отображалось только в том случае, если пользователь является суперпользователем. Мой фильтр выглядит так:
class OrderFilter(FilterUserMixin):
customer = django_filters.CharFilter(label='Cliente', method='filter_name')
def filter_name(self, queryset, name, value):
queryset = queryset.filter(customer__phone__icontains=value)
return queryset
class Meta:
model = Order
fields = ("store", "customer", "date")
filter_overrides = {
models.CharField: {
'filter_class': django_filters.CharFilter,
'extra': lambda f: {
'lookup_expr': 'icontains',
},
}
}
Все обычные пользователи должны иметь возможность фильтровать по покупателям и дате, но только суперпользователи должны иметь возможность фильтровать по магазину, остальные пользователи всегда должны видеть заказы один магазин, поэтому фильтрация магазина не требуется.
Я не знаю, как это сделать sh, я использую это представление:
class OrderTableView(LoginRequiredMixin, PagedFilteredTableView):
model = Order
table_class = OrderTable
template_name = 'order/order_list.html'
paginate_by = 50
filter_class = OrderFilter
formhelper_class = OrderFilterFormHelper
exclude_columns = ('actions',)
export_name = 'orders'
def get_queryset(self, **kwargs):
qs = super(OrderTableView, self).get_queryset()
if self.request.user.profile.store is not None and self.request.user.is_superuser is False:
qs = qs.filter(store=self.request.user.profile.store)
qs = qs.filter(total__gt=0).filter(address__isnull=False).filter(location__isnull=False)
return qs