pedagogy: search index for uvs and search api

This commit is contained in:
Antoine Bartuccio 2019-06-18 21:41:11 +02:00
parent 358a625cc4
commit 061320a5df
Signed by: klmp200
GPG Key ID: E7245548C53F904B
4 changed files with 86 additions and 0 deletions

View File

@ -0,0 +1,58 @@
# -*- coding:utf-8 -*
#
# Copyright 2017
# - Sli <antoine@bartuccio.fr>
#
# Ce fichier fait partie du site de l'Association des Étudiants de l'UTBM,
# http://ae.utbm.fr.
#
# This program is free software; you can redistribute it and/or modify it under
# the terms of the GNU General Public License a published by the Free Software
# Foundation; either version 3 of the License, or (at your option) any later
# version.
#
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
# details.
#
# You should have received a copy of the GNU General Public License along with
# this program; if not, write to the Free Sofware Foundation, Inc., 59 Temple
# Place - Suite 330, Boston, MA 02111-1307, USA.
#
#
from django.db import models
from haystack import indexes, signals
from core.search_indexes import BigCharFieldIndex
from pedagogy.models import UV
class IndexSignalProcessor(signals.BaseSignalProcessor):
"""
Auto update index on CRUD operations
"""
def setup(self):
# Listen only to the ``UV`` model.
models.signals.post_save.connect(self.handle_save, sender=UV)
models.signals.post_delete.connect(self.handle_delete, sender=UV)
def teardown(self):
# Disconnect only to the ``UV`` model.
models.signals.post_save.disconnect(self.handle_save, sender=UV)
models.signals.post_delete.disconnect(self.handle_delete, sender=UV)
class UVIndex(indexes.SearchIndex, indexes.Indexable):
"""
Indexer class for UVs
"""
text = BigCharFieldIndex(document=True, use_template=True)
auto = indexes.EdgeNgramField(use_template=True)
def get_model(self):
return UV

View File

@ -0,0 +1,2 @@
{{ object.code }}
{{ object.manager }}

View File

@ -0,0 +1,2 @@
{{ object.code }}
{{ object.manager }}

View File

@ -32,6 +32,7 @@ from django.views.generic import (
View, View,
) )
from django.core.urlresolvers import reverse_lazy from django.core.urlresolvers import reverse_lazy
from django.utils import html
from core.views import ( from core.views import (
DetailFormView, DetailFormView,
@ -41,6 +42,8 @@ from core.views import (
CanEditPropMixin, CanEditPropMixin,
) )
from haystack.query import SearchQuerySet
from pedagogy.forms import UVForm, UVCommentForm from pedagogy.forms import UVForm, UVCommentForm
from pedagogy.models import UV, UVComment from pedagogy.models import UV, UVComment
@ -144,6 +147,27 @@ class UVListView(CanViewMixin, CanCreateUVFunctionMixin, ListView):
ordering = ["code"] ordering = ["code"]
template_name = "pedagogy/guide.jinja" template_name = "pedagogy/guide.jinja"
def get_queryset(self):
query = self.request.GET.get("query", None)
if not query:
return super(UVListView, self).get_queryset()
try:
queryset = (
SearchQuerySet()
.models(self.model)
.autocomplete(auto=html.escape(query))
)
except TypeError:
return self.model.objects.none()
return (
super(UVListView, self)
.get_queryset()
.filter(id__in=([o.object.id for o in queryset]))
)
class UVCommentReportCreateView(CreateView): class UVCommentReportCreateView(CreateView):
""" """