0
0
mirror of https://github.com/wagtail/wagtail.git synced 2024-12-01 11:41:20 +01:00

Moved SearchableListMixin to wagtailadmin (#3970)

* Moved SearchableListMixin to wagtailadmin

* Add wagtailsearch support to SearchableListMixin

* Cleanup in SearchableListLixin

As per https://github.com/wagtail/wagtail/pull/3970#discussion_r146959286
This commit is contained in:
Karl Hobley 2017-10-30 09:47:40 +00:00 committed by GitHub
parent d6df75e1d2
commit c3022c23b5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 44 additions and 37 deletions

View File

@ -0,0 +1,42 @@
from __future__ import absolute_import, unicode_literals
from django.utils.translation import ugettext as _
from wagtail.wagtailadmin.forms import SearchForm
from wagtail.wagtailsearch.backends import get_search_backend
from wagtail.wagtailsearch.index import class_is_indexed
class SearchableListMixin(object):
search_box_placeholder = _("Search")
search_fields = None
def get_search_form(self):
return SearchForm(self.request.GET if self.request.GET.get('q') else None, placeholder=self.search_box_placeholder)
def get_queryset(self):
queryset = super(SearchableListMixin, self).get_queryset()
search_form = self.get_search_form()
if search_form.is_valid():
q = search_form.cleaned_data['q']
if class_is_indexed(queryset.model):
search_backend = get_search_backend()
queryset = search_backend.search(q, queryset, fields=self.search_fields)
else:
filters = {
field + '__icontains': q
for field in self.search_fields or []
}
queryset = queryset.filter(**filters)
return queryset
def get_context_data(self, **kwargs):
if 'search_form' not in kwargs:
kwargs['search_form'] = self.get_search_form()
kwargs['is_searching'] = bool(self.request.GET.get('q'))
return super(SearchableListMixin, self).get_context_data(**kwargs)

View File

@ -3,8 +3,7 @@ from __future__ import absolute_import, unicode_literals
from django.contrib.auth.models import Group from django.contrib.auth.models import Group
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
from wagtail.wagtailadmin.forms import SearchForm from wagtail.wagtailadmin.views import generic, mixins
from wagtail.wagtailadmin.views import generic
from wagtail.wagtailadmin.viewsets.model import ModelViewSet from wagtail.wagtailadmin.viewsets.model import ModelViewSet
from wagtail.wagtailcore import hooks from wagtail.wagtailcore import hooks
from wagtail.wagtailusers.forms import GroupForm, GroupPagePermissionFormSet from wagtail.wagtailusers.forms import GroupForm, GroupPagePermissionFormSet
@ -50,41 +49,7 @@ class PermissionPanelFormsMixin(object):
return super(PermissionPanelFormsMixin, self).get_context_data(**kwargs) return super(PermissionPanelFormsMixin, self).get_context_data(**kwargs)
class SearchableListMixin(object): class IndexView(mixins.SearchableListMixin, generic.IndexView):
search_box_placeholder = _("Search")
search_fields = []
def get_search_form(self):
if self.request.GET.get('q'):
return SearchForm(self.request.GET, placeholder=self.search_box_placeholder)
else:
return SearchForm(placeholder=self.search_box_placeholder)
def get_queryset(self):
queryset = super(SearchableListMixin, self).get_queryset()
search_form = self.get_search_form()
if search_form.is_valid():
q = search_form.cleaned_data['q']
filters = {
field + '__icontains': q
for field in self.search_fields
}
queryset = queryset.filter(**filters)
return queryset
def get_context_data(self, **kwargs):
if 'search_form' not in kwargs:
kwargs['search_form'] = self.get_search_form()
kwargs['is_searching'] = bool(self.request.GET.get('q'))
return super(SearchableListMixin, self).get_context_data(**kwargs)
class IndexView(SearchableListMixin, generic.IndexView):
page_title = _("Groups") page_title = _("Groups")
add_item_label = _("Add a group") add_item_label = _("Add a group")
search_box_placeholder = _("Search groups") search_box_placeholder = _("Search groups")