From 07480b637b109831ec284f2cefe52e78e496b174 Mon Sep 17 00:00:00 2001 From: Ivan Kovalkovskyi Date: Mon, 28 Sep 2015 17:09:21 +0300 Subject: [PATCH] article tag and theme search fix --- article/forms.py | 4 ++- article/models.py | 2 +- templates/client/article/blog_list.html | 2 +- theme/urls.py | 1 + theme/views.py | 34 +++++++++++++++++-------- 5 files changed, 30 insertions(+), 13 deletions(-) diff --git a/article/forms.py b/article/forms.py index 54e6477f..8810abe7 100644 --- a/article/forms.py +++ b/article/forms.py @@ -258,7 +258,7 @@ class BlogForm(forms.ModelForm): class ArticleFilterForm(forms.Form): theme = forms.MultipleChoiceField(label=_(u'Тематика:'), required=False, - choices=[(item.id, item.name) for item in Theme.objects.language().exclude(article__id=None)]) + choices=[(item.id, item.name) for item in Theme.objects.language().filter(article__type=1).exclude(article__id=None).distinct()]) tag = forms.CharField(label=_(u'Теги:'), widget=forms.HiddenInput(), required=False) ''' @@ -273,6 +273,7 @@ class ArticleFilterForm(forms.Form): choices=[(item.id, item.name) for item in Theme.objects.language().filter(id__in=ids)]) ''' + class BlogFilterForm(forms.Form): tag = forms.CharField(label=_(u'Теги:'), widget=forms.HiddenInput(), required=False) @@ -285,6 +286,7 @@ class BlogFilterForm(forms.Form): self.fields['theme'] = forms.MultipleChoiceField(label=_(u'Тематика:'), required=False, choices=[(item.id, item.name) for item in Theme.objects.language().filter(id__in=ids)]) + class NewsFilterForm(forms.Form): tag = forms.CharField(label=_(u'Теги:'), widget=forms.HiddenInput(), required=False) diff --git a/article/models.py b/article/models.py index 5b981113..5a0da916 100644 --- a/article/models.py +++ b/article/models.py @@ -81,7 +81,7 @@ class Article(TranslatableModel): old_id = models.IntegerField(blank=True, null=True) logo = ImageField(upload_to='articles_preview', blank=True) theme = models.ManyToManyField('theme.Theme') - tag = models.ManyToManyField('theme.Tag', related_name='tags',blank=True, null=True) + tag = models.ManyToManyField('theme.Tag', blank=True, null=True) author = models.ForeignKey('accounts.User', verbose_name='Автор', on_delete=models.PROTECT, related_name='articles') exposition = models.ForeignKey('exposition.Exposition', blank=True, null=True) diff --git a/templates/client/article/blog_list.html b/templates/client/article/blog_list.html index 17c35b26..0915cde5 100644 --- a/templates/client/article/blog_list.html +++ b/templates/client/article/blog_list.html @@ -50,7 +50,7 @@ }, tags:{ placeholder:"{% trans 'Выберите ключевые теги' %}", - url:'http://{{ request.get_host }}/theme/get-tag/' + url:'http://{{ request.get_host }}/theme/get-article-tags/' } }); diff --git a/theme/urls.py b/theme/urls.py index d8305d20..88a81794 100644 --- a/theme/urls.py +++ b/theme/urls.py @@ -3,4 +3,5 @@ from django.conf.urls import patterns, url urlpatterns = patterns('', url(r'^get-tag/$', 'theme.views.get_tag'), + url(r'^get-article-tags/$', 'theme.views.get_article_tags'), ) \ No newline at end of file diff --git a/theme/views.py b/theme/views.py index e5271db1..1deadf9b 100644 --- a/theme/views.py +++ b/theme/views.py @@ -5,16 +5,30 @@ from theme.models import Tag def get_tag(request): #if request.is_ajax(): - themes = request.GET.getlist('themes[]') - term = request.GET['term'].capitalize() - qs = Tag.objects.language().exclude(theme__article__id=None).distinct() - if term: - qs = qs.filter(translations__name__contains=term) - if themes: - qs = qs.filter(theme__id__in=themes).order_by('translations__name') - result = [{'id': tag.id, 'label': '%s (%s)'%(tag.name, tag.theme.name)} for tag in qs] - result = sorted(result, key=lambda x:x['label']) + themes = request.GET.getlist('themes[]') + term = request.GET['term'].capitalize() + qs = Tag.objects.language().exclude(theme__article__id=None).distinct() + if term: + qs = qs.filter(translations__name__contains=term) + if themes: + qs = qs.filter(theme__id__in=themes).order_by('translations__name') + result = [{'id': tag.id, 'label': '%s (%s)'%(tag.name, tag.theme.name)} for tag in qs] + result = sorted(result, key=lambda x:x['label']) - return HttpResponse(json.dumps(result), content_type='application/json') + return HttpResponse(json.dumps(result), content_type='application/json') #else: # return HttpResponse('not ajax') + + +def get_article_tags(request): + themes = request.GET.getlist('themes[]') + term = request.GET['term'].capitalize() + qs = Tag.objects.language().exclude(article=None).filter(article__type=1).distinct() + if themes: + qs = qs.filter(theme__id__in=themes).order_by('translations__name') + if term: + qs = qs.filter(translations__name__contains=term) + result = [{'id': tag.id, 'label': '%s (%s)'%(tag.name, tag.theme.name)} for tag in qs] + result = sorted(result, key=lambda x:x['label']) + + return HttpResponse(json.dumps(result), content_type='application/json') \ No newline at end of file