improve event organizer search
This commit is contained in:
@@ -164,7 +164,7 @@ class EventOrganizerLink(Orderable):
|
||||
]
|
||||
|
||||
|
||||
@register_snippet
|
||||
# registered as a snippet via EventOrganizerSnippetViewSet in wagtail_hooks.py
|
||||
@register_query_field("eventOrganizer", "eventOrganizers")
|
||||
class EventOrganizer(index.Indexed, ClusterableModel):
|
||||
objects = WPAwareManager()
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -3,10 +3,13 @@ from django.utils.translation import gettext_lazy as _
|
||||
from wagtail import hooks
|
||||
from wagtail.admin.auth import user_passes_test
|
||||
from wagtail.admin.menu import MenuItem
|
||||
from wagtail.snippets.models import register_snippet
|
||||
|
||||
from .admin import event_sidebar_viewset, event_explorer_viewset
|
||||
from .merge_organizers import MergeOrganizersConfirmView, MergeOrganizersSelectView
|
||||
from .views import event_organizer_chooser_viewset
|
||||
from .views import EventOrganizerSnippetViewSet, event_organizer_chooser_viewset
|
||||
|
||||
register_snippet(EventOrganizerSnippetViewSet)
|
||||
|
||||
superuser_only = user_passes_test(lambda user: user.is_superuser)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user