improve event organizer search

This commit is contained in:
2026-07-05 17:53:33 +02:00
parent e57eb48c88
commit 36c01902a1
4 changed files with 78 additions and 2 deletions
+44
View File
@@ -1,11 +1,53 @@
from django import forms
from django.db.models import Q
from django.utils.translation import gettext_lazy as _
from wagtail.admin.forms import WagtailAdminModelForm
from wagtail.admin.forms.choosers import BaseFilterForm
from wagtail.admin.views.generic.chooser import ChooseResultsView, ChooseView
from wagtail.admin.viewsets.chooser import ChooserViewSet
from wagtail.snippets.views.snippets import SnippetViewSet
from dnscms.utils import slugify
from events.models import EventOrganizer
class EventOrganizerSearchForm(BaseFilterForm):
"""Substring search on name/slug"""
q = forms.CharField(
label=_("Search term"),
widget=forms.TextInput(attrs={"placeholder": _("Search")}),
required=False,
)
def filter(self, objects):
objects = super().filter(objects)
search_query = self.cleaned_data.get("q")
if search_query:
objects = objects.filter(
Q(name__icontains=search_query) | Q(slug__icontains=search_query)
)
self.is_searching = True
self.search_query = search_query
return objects
class EventOrganizerChooseView(ChooseView):
filter_form_class = EventOrganizerSearchForm
class EventOrganizerChooseResultsView(ChooseResultsView):
filter_form_class = EventOrganizerSearchForm
class EventOrganizerSnippetViewSet(SnippetViewSet):
model = EventOrganizer
icon = "group"
# unset the search backend so the listing search filters on icontains instead
search_backend_name = None
search_fields = ["name", "slug"]
class EventOrganizerCreationForm(WagtailAdminModelForm):
class Meta:
model = EventOrganizer
@@ -29,6 +71,8 @@ class EventOrganizerChooserViewSet(ChooserViewSet):
choose_another_text = _("Choose another organizer")
edit_item_text = _("Edit this organizer")
creation_form_class = EventOrganizerCreationForm
choose_view_class = EventOrganizerChooseView
choose_results_view_class = EventOrganizerChooseResultsView
event_organizer_chooser_viewset = EventOrganizerChooserViewSet("event_organizer_chooser")