Example #1
0
class UserSearchPeople(TemplateView):
    template_name = 'users/search.html'

    @method_decorator(login_required)
    def dispatch(self, request, *args, **kwargs):
        self.form = SearchPeopleForm(request.GET or None)
        return super(UserSearchPeople, self).dispatch(request, *args, **kwargs)

    def get_filtered_qs(self, qs):
        self.form.is_valid()
        if not hasattr(self.form, 'cleaned_data'):
            return qs
        if self.form.cleaned_data.get('fname_and_lname'):
            query = None
            for val in self.form.get_values_list('fname_and_lname'):
                print val
                q = Q(first_name__icontains=val) | Q(last_name__icontains=val)
                if query is None:
                    query = q
                else:
                    query |= q
            if query:
                qs = qs.filter(query)
        if self.form.cleaned_data.get('gender'):
            qs = qs.filter(gender=self.form.cleaned_data['gender'])
        if self.form.cleaned_data.get('from_date'):
            qs = qs.filter(birth_date__gte=datetime.datetime(self.form.cleaned_data['from_date'], 1, 1))
        if self.form.cleaned_data.get('to_date'):
            qs = qs.filter(birth_date__lt=datetime.datetime(self.form.cleaned_data['to_date'] + 1, 1, 1))
        for field_name in ('city', 'job', 'about_me', 'interests'):
            query = None
            for val in self.form.get_values_list(field_name):
                q = Q(**{'{}__icontains'.format(field_name): val})
                if query is None:
                    query = q
                else:
                    query |= q
            if query:
                qs = qs.filter(query)
        return qs

    def get_context_data(self, **kwargs):
        context = super(UserSearchPeople, self).get_context_data(**kwargs)
        context['form'] = self.form
        qs = self.get_filtered_qs(User.objects.all())
        paginator = Paginator(qs, 20)
        page = self.request.GET.get('page')
        try:
            items = paginator.page(page)
        except PageNotAnInteger:
            items = paginator.page(1)
        except EmptyPage:
            items = paginator.page(paginator.num_pages)
        context['items'] = items
        return context
Example #2
0
 def dispatch(self, request, *args, **kwargs):
     self.form = SearchPeopleForm(request.GET or None)
     return super(UserSearchPeople, self).dispatch(request, *args, **kwargs)