Commit 7a0de8bb authored by felix.herrmann's avatar felix.herrmann Committed by hynek
Browse files

feat(search): add search to user view and templates

parent 9918500e
......@@ -30,3 +30,17 @@ class UserDocument(Document):
# Paginate the django queryset used to populate the index with the specified size
# (by default it uses the database driver's default setting)
# queryset_pagination = 5000
# search usage example
# https://elasticsearch-dsl.readthedocs.io/en/latest/faceted_search.html#usage
#
# from elasticsearch_dsl import FacetedSearch, TermsFacet, DateHistogramFacet
# class BlogSearch(FacetedSearch):
# doc_type = [UserDocument]
# fields = ['first_name', 'last_name']
#
#
# bs = BlogSearch('Heiko')
# response = bs.execute()
#
......@@ -3,10 +3,12 @@ from django.urls import path
from discuss_data.ddusers import views
app_name = "ddusers"
# public URLs
urlpatterns = [
path("search/", views.SearchResultsView.as_view(), name="search"),
path("list/", views.user_list, name="list"),
path("<uuid:us_uuid>/", views.user_detail, name="detail"),
# users search for dataset access control
......
......@@ -6,6 +6,7 @@ from django.http import Http404
from django.contrib.auth import update_session_auth_hash
from django.contrib.auth.forms import PasswordChangeForm
from django.contrib import messages
from django.views.generic import ListView
from actstream.models import (
actor_stream,
......@@ -36,11 +37,50 @@ from discuss_data.core.models import KeywordTags
from discuss_data.core.models import KeywordTagged
from discuss_data.core.models import LanguageTagged
from discuss_data.ddusers.documents import UserDocument
from elasticsearch_dsl import Q
import logging
logger = logging.getLogger("ddusers")
# search usage example
# https://elasticsearch-dsl.readthedocs.io/en/latest/faceted_search.html#usage
#
# from elasticsearch_dsl import FacetedSearch, TermsFacet, DateHistogramFacet
# class BlogSearch(FacetedSearch):
# doc_type = [UserDocument]
# fields = ['first_name', 'last_name']
#
#
# bs = BlogSearch('Heiko')
# response = bs.execute()
#
class SearchResultsView(ListView):
model = User
template_name = "ddusers/search_results.html"
def get_queryset(self):
term = self.request.GET.get("q")
# https://elasticsearch-dsl.readthedocs.io/en/stable/search_dsl.html#queries
# q = Q("multi_match", query=term, fields=['first_name', 'last_name'])
# https://github.com/elastic/elasticsearch-dsl-py/issues/190
q = Q("wildcard", first_name=term.lower() + "*") | Q(
"wildcard", last_name=term.lower() + "*"
)
# search = UserDocument.search().query('wildcard', last_name=search_query + "*")
search = UserDocument.search().filter(q)
qs = search.to_queryset()
return qs
def dashboard_page(request):
"""
Dashboard User Page
......
......@@ -50,7 +50,7 @@
{% endfor %}
{% endif %}
<div id="content">
{% block content %}
<p>Auch gibt es niemanden, der den Schmerz an sich liebt, sucht oder wünscht, nur, weil er Schmerz ist, es sei denn, es kommt zu zufälligen Umständen, in denen Mühen und Schmerz ihm große Freude bereiten können. Um ein triviales Beispiel zu nehmen, wer von uns unterzieht sich je anstrengender körperlicher Betätigung, außer um Vorteile daraus zu ziehen? Aber wer hat irgend ein Recht, einen Menschen zu tadeln, der die Entscheidung trifft, eine Freude zu genießen, die keine unangenehmen Folgen hat, oder einen, der Schmerz vermeidet, welcher keine daraus resultierende Freude nach sich zieht? Auch gibt es niemanden, der den Schmerz an sich liebt, sucht oder wünscht, nur, weil er Schmerz ist, es sei denn, es kommt zu zufälligen Umständen, in denen Mühen und Schmerz ihm große Freude bereiten können. Um ein triviales Beispiel zu nehmen, wer von uns unterzieht sich je anstrengender körperlicher Betätigung, außer um Vorteile daraus zu ziehen? Aber wer hat irgend ein Recht, einen Menschen zu tadeln, der die Entscheidung trifft, eine Freude zu genießen, die keine unangenehmen Folgen hat, oder einen, der Schmerz vermeidet, welcher keine daraus resultierende Freude nach sich zieht?</p>
......@@ -73,6 +73,7 @@
<p>Auch gibt es niemanden, der den Schmerz an sich liebt, sucht oder wünscht, nur, weil er Schmerz ist, es sei denn, es kommt zu zufälligen Umständen, in denen Mühen und Schmerz ihm große Freude bereiten können. Um ein triviales Beispiel zu nehmen, wer von uns unterzieht sich je anstrengender körperlicher Betätigung, außer um Vorteile daraus zu ziehen? Aber wer hat irgend ein Recht, einen Menschen zu tadeln, der die Entscheidung trifft, eine Freude zu genießen, die keine unangenehmen Folgen hat, oder einen, der Schmerz vermeidet, welcher keine daraus resultierende Freude nach sich zieht? Auch gibt es niemanden, der den Schmerz an sich liebt, sucht oder wünscht, nur, weil er Schmerz ist, es sei denn, es kommt zu zufälligen Umständen, in denen Mühen und Schmerz ihm große Freude bereiten können. Um ein triviales Beispiel zu nehmen, wer von uns unterzieht sich je anstrengender körperlicher Betätigung, außer um Vorteile daraus zu ziehen? Aber wer hat irgend ein Recht, einen Menschen zu tadeln, der die Entscheidung trifft, eine Freude zu genießen, die keine unangenehmen Folgen hat, oder einen, der Schmerz vermeidet, welcher keine daraus resultierende Freude nach sich zieht? Auch gibt es niemanden, der den Schmerz an sich liebt, sucht oder wünscht, nur, weil er Schmerz ist, es sei denn, es kommt zu zufälligen Umständen, in denen Mühen und Schmerz ihm große Freude bereiten können. Um ein triviales Beispiel zu nehmen, wer von uns unterzieht sich je anstrengender körperlicher Betätigung, außer um Vorteile daraus zu ziehen? Aber wer hat irgend ein Recht, einen Menschen zu tadeln, der die Entscheidung trifft, eine Freude zu genießen, die keine unangenehmen Folgen hat, oder einen, der Schmerz vermeidet, welcher keine daraus resultierende Freude nach sich zieht? Auch gibt es niemanden, der den Schmerz an sich liebt, sucht oder wünscht, nur, weil er Schmerz ist, es sei denn, es kommt zu zufälligen Umständen, in denen Mühen und Schmerz ihm große Freude bereiten können. Um ein triviales Beispiel zu nehmen, wer von uns unterzieht sich</p>
{% endblock content %}
</div>
</div>
......
......@@ -20,8 +20,10 @@
<span class="navbar-toggler-icon" />
</button>
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<input class="w-25 form-control mx-auto" type="text" placeholder="Search" aria-label="Search">
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<input class="w-25 form-control mx-auto" type="text" placeholder="Search" name="q" ic-get-from="{% url 'ddusers:search' %}" ic-target="#content" aria-label="Search">
<ul class="navbar-nav ml-auto">
{% if request.user.is_authenticated %}
<li class="nav-item">
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment