improve event organizer search
This commit is contained in:
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user