From dc999beebf7488fab143cfc9e33d3b10ed12539f Mon Sep 17 00:00:00 2001 From: Zambom Date: Thu, 29 Dec 2016 17:50:07 -0200 Subject: [PATCH] Adding user's search --- users/templates/users/list.html | 2 +- users/templates/users/search.html | 71 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ users/urls.py | 5 +++-- users/views.py | 31 +++++++++++++++++++++++++++++++ 4 files changed, 106 insertions(+), 3 deletions(-) create mode 100644 users/templates/users/search.html diff --git a/users/templates/users/list.html b/users/templates/users/list.html index 0d4d385..e903926 100644 --- a/users/templates/users/list.html +++ b/users/templates/users/list.html @@ -24,7 +24,7 @@
-
+
diff --git a/users/templates/users/search.html b/users/templates/users/search.html new file mode 100644 index 0000000..aa173f4 --- /dev/null +++ b/users/templates/users/search.html @@ -0,0 +1,71 @@ +{% extends 'users/list.html' %} + +{% load i18n pagination django_bootstrap_breadcrumbs permission_tags static %} + +{% block breadcrumbs %} + {{ block.super }} + {% with 'Search for "'|add:search|add:'"' as search_bread %} + {% breadcrumb search_bread 'users:search' %} + {% endwith %} +{% endblock %} + +{% block menu %} +{% endblock %} + +{% block content %} +
+
+ +
+
+ +
+
+ +
+
+ +
+ +
+ + {% if users %} + {% for acc in users %} +
+
+
+ + + +
+
+

{% trans 'Name' %}: {{ acc }}

+

{% trans 'Email' %}: {{ acc.email }}

+

{% trans 'Description' %}: + {% autoescape off %} + {{ acc.description|default:_("Not Informed")|striptags|truncatechars:300 }} + {% endautoescape %} +

+
+ +
+
+ {% endfor %} + {% pagination request paginator page_obj %} + {% else %} +
+
+

{% trans 'No users found' %}

+
+
+ {% endif %} +{% endblock %} diff --git a/users/urls.py b/users/urls.py index c345ebe..6e190b7 100644 --- a/users/urls.py +++ b/users/urls.py @@ -11,8 +11,9 @@ urlpatterns = [ url(r'^reset_password_confirm/(?P[0-9A-Za-z]+)-(?P.+)/$', views.PasswordResetConfirmView.as_view(), name = 'reset_password_confirm'), url(r'^$', views.UsersListView.as_view(), name = 'manage'), url(r'^create/$', views.CreateView.as_view(), name = 'create'), - url(r'^edit/(?P[\w.%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4})/$', views.UpdateView.as_view(), name='update'), - url(r'^delete/(?P[\w.%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4})/$', views.DeleteView.as_view(), name='delete'), + url(r'^edit/(?P[\w.%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4})/$', views.UpdateView.as_view(), name = 'update'), + url(r'^delete/(?P[\w.%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4})/$', views.DeleteView.as_view(), name = 'delete'), + url(r'^search/$', views.SearchView.as_view(), name = 'search'), url(r'^profile/$', views.Profile.as_view(), name = 'profile'), url(r'^edit_profile/$', views.UpdateProfile.as_view(), name = 'edit_profile'), url(r'^change_pass/$', views.ChangePassView.as_view(), name='change_pass'), diff --git a/users/views.py b/users/views.py index b66a43c..607e1a3 100644 --- a/users/views.py +++ b/users/views.py @@ -5,6 +5,7 @@ from django.contrib.auth import authenticate, login as login_user from django.contrib.auth.mixins import LoginRequiredMixin from django.core.urlresolvers import reverse, reverse_lazy from django.utils.translation import ugettext_lazy as _ +from django.db.models import Q from .models import User from .forms import RegisterUserForm, ProfileForm, UserForm, ChangePassForm, PassResetRequest, SetPasswordForm @@ -42,6 +43,36 @@ class UsersListView(LoginRequiredMixin, generic.ListView): return context +class SearchView(LoginRequiredMixin, generic.ListView): + login_url = reverse_lazy("users:login") + redirect_field_name = 'next' + + template_name = 'users/search.html' + context_object_name = 'users' + paginate_by = 10 + + def dispatch(self, request, *args, **kwargs): + search = self.request.GET.get('search', '') + + if search == '': + return redirect(reverse_lazy('users:manage')) + + return super(SearchView, self).dispatch(request, *args, **kwargs) + + def get_queryset(self): + search = self.request.GET.get('search', '') + + users = User.objects.filter(Q(username__icontains = search) | Q(last_name__icontains = search) | Q(social_name__icontains = search) | Q(email__icontains = search)).order_by('social_name','username').exclude(email = self.request.user.email) + + return users + + def get_context_data (self, **kwargs): + context = super(SearchView, self).get_context_data(**kwargs) + context['title'] = _('Search Users') + context['search'] = self.request.GET.get('search') + + return context + class CreateView(LoginRequiredMixin, generic.edit.CreateView): login_url = reverse_lazy("users:login") redirect_field_name = 'next' -- libgit2 0.21.2