remotes/origin/1203
kotzilla 11 years ago
parent 21271c5132
commit fe26a56907
  1. 126
      accounts/forms.py
  2. 25
      accounts/views.py
  3. 2
      templates/client/accounts/feed.html

@ -1,9 +1,14 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import json
import ast
from django import forms from django import forms
from django.contrib.auth.forms import ReadOnlyPasswordHashField from django.contrib.auth.forms import ReadOnlyPasswordHashField
from django.forms.util import ErrorList from django.forms.util import ErrorList
from django.utils.translation import ugettext as _ from django.utils.translation import ugettext as _
from models import User, Profile from models import User, Profile
from theme.models import Theme, Tag
from country.models import Area
from django.utils import translation
from country.models import Country from country.models import Country
from city.models import City from city.models import City
from company.models import Company from company.models import Company
@ -303,3 +308,124 @@ class UserFilterForm(forms.Form):
qs = qs.filter(email__contains=email) qs = qs.filter(email__contains=email)
return qs return qs
class FeedFilterForm(forms.Form):
data_with_parents = None
filter = None
th = forms.MultipleChoiceField(label=_(u'Тематика'), choices=[(item.id, item.name) for item in Theme.active.all()],
required=False, widget=forms.CheckboxSelectMultiple())
tg = forms.CharField(label=_(u'Теги'), required=False, widget=forms.CheckboxSelectMultiple())
area = forms.MultipleChoiceField(label=_(u'Регион'), choices=[(item.id, item.name) for item in Area.objects.all_sorted()],
required=False, widget=forms.CheckboxSelectMultiple())
co = forms.MultipleChoiceField(label=_(u'Страна'), required=False, widget=forms.CheckboxSelectMultiple(),
choices=[(item.id, item.name) for item in Country.objects.select_related('exposition_country')\
.filter(exposition_country__country__isnull=False, translations__language_code=translation.get_language())\
.order_by('translations__name').distinct()]
)
ci = forms.MultipleChoiceField(label=_(u'Город'), required=False, widget=forms.CheckboxSelectMultiple(),
choices=[(item.id, item.name) for item in City.objects.select_related('exposition_city')\
.filter(exposition_city__city__isnull=False, translations__language_code=translation.get_language())\
.order_by('translations__name').distinct()]
)
fr = forms.DateField(required=False,
widget=forms.DateInput(attrs={'class': 'date', 'id': 'dateFrom',
'placeholder': _(u'дд.мм.гггг')}))
to = forms.DateField(required=False,
widget=forms.DateInput(attrs={'class': 'date', 'id': 'dateTo',
'placeholder': _(u'дд.мм.гггг')}))
def __init__(self, *args, **kwargs):
user = kwargs.get('user')
if 'user' in kwargs: del kwargs['user']
super(FeedFilterForm, self).__init__(*args, **kwargs)
filter = user.eventfilter
self.filter = filter
self.data_with_parents = self.get_form_data(filter)
def get_form_data(self, filter):
if filter.area.exists():
areas = [{'name':'area', 'id':item.id, 'parent':None, 'text':item.name} for item in filter.area.all()]
else:
areas = []
if filter.country.exists():
cos = []
for country in filter.country.all():
cos.append({'name':'area', 'id':country.area_id, 'text': country.area.name, 'children':{
'id': country.id, 'name':'co', 'text': country.name
}
})
else:
cos = []
if filter.city.exists():
cis = []
for city in filter.city.all():
cis.append({'name':'area', 'id': city.country.area_id, 'text': city.country.area.name, 'children':{
'id': city.country_id, 'name':'co', 'text': city.country.name, 'children':{
'name':'ci', 'id':city.id, 'text':city.name
}
}
})
else:
cis = []
if filter.theme.exists():
ths = [{'name':'th', 'id':item.id, 'parent':None, 'text':item.name} for item in filter.theme.all()]
else:
ths = []
if filter.tag.exists():
tgs = []
for tag in filter.tag.all():
tgs.append({'name':'th', 'id':tag.theme_id, 'text': tag.theme.name, 'children':{
'id': tag.id, 'name':'tg', 'text': tag.name
}
})
else:
tgs = []
finale_list = areas + cos + cis + ths + tgs
result = {'inputs': finale_list}
result = json.dumps(result)
return result
def filter_save(self):
theme = self.cleaned_data['th']
tag = self.cleaned_data['tg']
area = self.cleaned_data['area']
country = self.cleaned_data['co']
city = self.cleaned_data['ci']
filter = self.filter
filter.theme.clear()
filter.theme.add(*Theme.objects.filter(id__in=theme))
filter.tag.clear()
filter.tag.add(*Tag.objects.filter(id__in=tag))
filter.area.clear()
filter.area.add(*Area.objects.filter(id__in=area))
filter.country.clear()
filter.country.add(*Country.objects.filter(id__in=country))
filter.city.clear()
filter.city.add(*City.objects.filter(id__in=city))
def clean_tg(self):
tg = self.cleaned_data.get('tg')
if tg:
res = ast.literal_eval(tg)
return res
return tg

@ -9,10 +9,10 @@ from django.utils import timezone
from django_messages.forms import SendForm from django_messages.forms import SendForm
from django.views.generic import TemplateView, FormView, ListView from django.views.generic import TemplateView, FormView, ListView
from sorl.thumbnail import get_thumbnail from sorl.thumbnail import get_thumbnail
from forms import ChangePasswordForm, EmailAnnouncementForm from .forms import ChangePasswordForm, EmailAnnouncementForm, FeedFilterForm
from company.forms import CreateCompanyForm from company.forms import CreateCompanyForm
from models import User from .models import User
from edit_forms import AvatarForm, NameForm, HomeForm, WorkForm, AboutCompanyForm, PhoneForm, EmailForm,\ from .edit_forms import AvatarForm, NameForm, HomeForm, WorkForm, AboutCompanyForm, PhoneForm, EmailForm,\
WebPageForm, SocialForm, AboutForm WebPageForm, SocialForm, AboutForm
@ -383,14 +383,31 @@ def change_password(request):
else: else:
return HttpResponse(json.dumps(success), content_type='application/json') return HttpResponse(json.dumps(success), content_type='application/json')
from django.views.generic.edit import FormMixin
class Feed(ListView): class Feed(ListView):
template_name = 'client/accounts/feed.html' template_name = 'client/accounts/feed.html'
paginate_by = 5 paginate_by = 5
model = Exposition model = Exposition
filter_form = FeedFilterForm
success_url = '/profile/feed/'
def post(self, request):
user = self.request.user
form = self.filter_form(request.POST, user=user)
if form.is_valid():
form.filter_save()
return HttpResponseRedirect(self.success_url)
def get_queryset(self): def get_queryset(self):
filter = self.request.user.eventfilter filter = self.request.user.eventfilter
qs = filter.get_queryset() qs = filter.get_queryset()
return qs return qs
def get_context_data(self, **kwargs):
context = super(Feed, self).get_context_data(**kwargs)
user = self.request.user
filter_form = self.filter_form(user=user)
context['filter_form'] = filter_form
return context

@ -48,7 +48,7 @@
</div> </div>
</section> </section>
</div> </div>
<form action="" class="search_form" id="filter-block-form"> <form method="post" action="/profile/feed/" class="search_form" id="filter-block-form">{% csrf_token %}
<div class="modals"> <div class="modals">
<div class="search-modal-overlay" id="filter-modal"> <div class="search-modal-overlay" id="filter-modal">
<div class="search-modal-wrap fancybox-skin"> <div class="search-modal-wrap fancybox-skin">

Loading…
Cancel
Save