add filter, search text and per page choices

This commit is contained in:
2025-03-05 15:43:20 +01:00
parent c6684122ea
commit 97c01c4a97
2 changed files with 173 additions and 52 deletions

View File

@@ -231,6 +231,71 @@ class ResolutionListView(LoginRequiredMixin, ListView):
ordering = ["-id"]
paginate_by = 10
_per_page = 10
_per_page_lst = ["10", "20", "50", "Alle"]
def get(self, request, *args, **kwargs):
self.q = request.GET.get("q", "")
self.options_filters = request.GET.getlist("options", [])
self._per_page = request.GET.get("paginate_by", "10")
if self._per_page == "Alle":
self.paginate_by = None
else:
self.paginate_by = self._per_page
return super().get(request, *args, **kwargs)
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["q"] = self.q
# Add selected and all options
context["options"] = Resolution.Option.choices
context["selected_options"] = self.options_filters
# Add current per page value and list
context["per_page"] = self._per_page
context["per_page_values"] = self._per_page_lst
# Add paginator links
if context["is_paginated"]:
_page_obj = context["page_obj"]
base_url = "?"
for option in self.options_filters:
base_url += f"options={option}&".replace(" ", "+")
if self.q:
base_url += f"q={self.q}&".replace(" ", "+")
end_url = f"paginate_by={self._per_page}"
if _page_obj.has_previous():
context["prev_page"] = (
f"{base_url}page={_page_obj.previous_page_number()}&{end_url}"
)
context["first_page"] = f"{base_url}page=1&{end_url}"
if _page_obj.has_next():
context["next_page"] = f"{base_url}page={_page_obj.next_page_number()}&{end_url}"
context["last_page"] = f"{base_url}page={_page_obj.paginator.num_pages}&{end_url}"
return context
def get_queryset(self):
qs = super().get_queryset()
if self.q:
qs = qs.filter(Q(name__icontains=self.q) | Q(voting_text__icontains=self.q))
if self.options_filters:
filter_lst = [
elem[0] for elem in Resolution.Option.choices if elem[1] in self.options_filters
]
qs = qs.filter(option__in=filter_lst)
return qs
class ResolutionUpdateView(LoginRequiredMixin, UpdateView):