def get_queryset(self): filters = Q() self.filter_form = FilterForm(self.request.GET) if self.filter_form.is_valid(): rules = self.filter_form.cleaned_data["rule"] blacklists = self.filter_form.cleaned_data["blacklist"] earliest = self.filter_form.cleaned_data["earliest"] latest = self.filter_form.cleaned_data["latest"] if rules: filters = filters & Q(rule__in=rules) if blacklists: filters = filters & Q(rule__in=blacklists) if earliest: filters = filters & Q(start__gte=earliest) if latest: filters = filters & Q(finish__lte=latest) return ( self.model.objects.filter(filters) .values("username") .annotate( Concatenate("blacklist__name"), Concatenate("rule__name"), Count("id"), packets=Sum("alerts"), earliest=Min("start"), latest=Max("finish"), ) .order_by("-id__count") )
class UsersListView(ListView): model = Event template_name = "eduroam_snort/users.html" context_object_name = "users" paginate_by = 20 def get_queryset(self): filters = Q() self.filter_form = FilterForm(self.request.GET) if self.filter_form.is_valid(): rules = self.filter_form.cleaned_data["rule"] blacklists = self.filter_form.cleaned_data["blacklist"] earliest = self.filter_form.cleaned_data["earliest"] latest = self.filter_form.cleaned_data["latest"] if rules: filters = filters & Q(rule__in=rules) if blacklists: filters = filters & Q(rule__in=blacklists) if earliest: filters = filters & Q(start__gte=earliest) if latest: filters = filters & Q(finish__lte=latest) return ( self.model.objects.filter(filters) .values("username") .annotate( Concatenate("blacklist__name"), Concatenate("rule__name"), Count("id"), packets=Sum("alerts"), earliest=Min("start"), latest=Max("finish"), ) .order_by("-id__count") ) def get_context_data(self, **kwargs): context = super(UsersListView, self).get_context_data(**kwargs) for obj in context["object_list"]: obj["blacklists"] = parse_concat(obj["blacklist__name__concatenate"]) obj["rules"] = parse_concat(obj["rule__name__concatenate"]) context["filter_form"] = self.filter_form query = self.request.GET.copy() query.pop("page", None) for key, value in query.items(): if not value: del (query[key]) if key not in set(("rule", "blacklist", "earliest", "latest")): del (query[key]) context["querystring"] = "?" if query: context["querystring"] += query.urlencode() + "&" return context