forum: increase search speed by optimizing permission filter

This commit is contained in:
Antoine Bartuccio 2018-12-12 15:31:22 +01:00 committed by Skia
parent a9bae46f45
commit e421a2b4cd
2 changed files with 18 additions and 5 deletions

View File

@ -43,7 +43,6 @@ from django.db.models import Count
from core.models import Group
from core.views.forms import LoginForm
from haystack.query import SearchQuerySet
def forbidden(request):

View File

@ -56,10 +56,24 @@ class ForumSearchView(ListView):
query = self.request.GET.get("query", "")
if query == "":
return []
queryset = SearchQuerySet().models(ForumMessage).autocomplete(auto=query)[:100]
return [
r.object for r in queryset if can_view(r.object.topic, self.request.user)
][:30]
queryset = (
SearchQuerySet().models(ForumMessage).autocomplete(auto=query).load_all()
)
# Filter unauthorized responses
resp = []
count = 0
max_count = 30
for r in queryset:
if count >= max_count:
return resp
if can_view(r.object, self.request.user) and can_view(
r.object.topic, self.request.user
):
resp.append(r.object)
count += 1
return resp
class ForumMainView(ListView):