diff --git a/projects/forms.py b/projects/forms.py index 8d8b449..a7580c3 100644 --- a/projects/forms.py +++ b/projects/forms.py @@ -13,17 +13,20 @@ from users.models import User # RealtyFormSet = inlineformset_factory(Project, Realty) -PROJECT_ORDER_CHOICES = ( - ('name', 'Name'), - ('budget', 'Budget'), - ('created', 'Created'), - ('views', 'Views'), -) + class ProjectFilterForm(forms.ModelForm): + PROJECT_ORDER_CHOICES = ( # "Упорядочить по"... + ('name', 'названию'), + ('budget', 'цене'), + ('created', 'дате размещения'), + ('views', 'просмотрам'), + ) + order_by = forms.ChoiceField(required=False, choices=PROJECT_ORDER_CHOICES) last_order_by = forms.ChoiceField(required=False, choices=PROJECT_ORDER_CHOICES) reverse_order = forms.BooleanField(required=False) + keywords = forms.CharField(required=False, max_length=255) class Meta: model = Project diff --git a/projects/templates/project_filter.html b/projects/templates/project_filter.html index 5118bb9..e921393 100644 --- a/projects/templates/project_filter.html +++ b/projects/templates/project_filter.html @@ -49,10 +49,15 @@ -
- +
@@ -153,35 +158,9 @@

Сортировать по:

-{#
#} -{# цене#} -{# #} -{# #} -{# #} -{# cорту#} -{# #} -{# #} -{# #} -{# рейтингу#} -{# #} -{# #} -{# #} -{# дате размещения#} -{# #} -{# #} -{# #} -{# ответам#} -{# #} -{# #} -{# #} -{# просмотрам#} -{# #} -{# #} - - - - - + {% for val, text in form.order_by.field.choices %} + + {% endfor %} @@ -264,24 +243,16 @@
    {% if projects.has_previous %}
  • -{# #} -{# #} -{# #} -
  • {% endif %} {% for n in projects.paginator.page_range %} {% if n == projects.number %} -{#
  • {{ n }}
  • #} -
  • {% else %} -{#
  • {{ n }}
  • #} -
  • @@ -290,10 +261,6 @@ {% if projects.has_next %}
  • -{# #} -{# #} -{# #} -
  • {% endif %} diff --git a/projects/views.py b/projects/views.py index 16baf3e..5b9e970 100644 --- a/projects/views.py +++ b/projects/views.py @@ -3,6 +3,7 @@ from django.contrib import messages from django.contrib.auth.mixins import PermissionRequiredMixin, LoginRequiredMixin from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger from django.core.urlresolvers import reverse, reverse_lazy +from django.db.models import Q from django.http import HttpResponseForbidden, HttpResponseRedirect, HttpResponse, Http404 from django.shortcuts import render, get_object_or_404, redirect from django.views.generic import ListView, DetailView, CreateView, View, UpdateView, TemplateView, FormView @@ -10,6 +11,7 @@ from django.views.generic.base import ContextMixin from pprint import pprint, pformat import json import pydash as _ +import re from .mixins import LastAccessMixin from .models import Project, ProjectFile, Portfolio, Candidate, Answer, Realty, Order @@ -43,6 +45,7 @@ class ProjectFilterView(BaseMixin, View): projects = Project.objects if form.is_valid() and realty_form.is_valid(): + keywords = form.cleaned_data.get('keywords') cro = form.cleaned_data.get('cro') work_type = form.cleaned_data.get('work_type') specialization = form.cleaned_data.get('specialization') @@ -51,6 +54,12 @@ class ProjectFilterView(BaseMixin, View): construction_type = realty_form.cleaned_data.get('construction_type') location = realty_form.cleaned_data.get('location') + if keywords: + keywords = tuple(filter(None, re.split(r'\s|,|;', keywords))) + + for k in keywords: + projects = projects.filter(Q(name__icontains=k) | Q(text__icontains=k)) + projects = projects.filter(cro=cro) if work_type: @@ -122,6 +131,8 @@ class ProjectFilterView(BaseMixin, View): except EmptyPage: projects = paginator.page(paginator.num_pages) + # import code; code.interact(local=dict(globals(), **locals())) + context.update({ 'form': form, 'realty_form': realty_form,