diff --git a/article/admin.py b/article/admin.py
index 70698ca5..0ba6754c 100644
--- a/article/admin.py
+++ b/article/admin.py
@@ -171,10 +171,7 @@ class BlogView(FormView):
article = self.obj
data = {}
data['slug'] = article.slug
- if self.obj.type == Article.blog:
- data['theme'] = [item.id for item in article.blog_theme.all()]
- else:
- data['theme'] = [item.id for item in article.theme.all()]
+ data['theme'] = [item.id for item in article.theme.all()]
if article.exposition:
data['exposition'] = article.exposition.id
if article.conference:
diff --git a/article/forms.py b/article/forms.py
index 9fc5304c..d5c265dd 100644
--- a/article/forms.py
+++ b/article/forms.py
@@ -9,15 +9,19 @@ from functions.files import check_tmp_files
from functions.form_check import translit_with_separator
from models import Article
from accounts.models import User
-from theme.models import Theme, Tag, ThemeBlog
+from theme.models import Theme, Tag
from exposition.models import Exposition
from conference.models import Conference
class _BlogForm(forms.Form):
type = Article.blog
- theme = forms.ModelMultipleChoiceField(label='Тематики', queryset=ThemeBlog.objects.all(), required=False,
- widget=forms.SelectMultiple(attrs={'style':'width: 550px'}))
+ theme = forms.ModelMultipleChoiceField(
+ label='Тематики',
+ queryset=Theme.objects.filter(types=Theme.types.article),
+ required=False,
+ widget=forms.SelectMultiple(attrs={'style':'width: 550px'})
+ )
slug = forms.SlugField(label=u'URL', max_length=255, min_length=1, required=False)
publish_date = forms.DateField(label=u'Дата публикации', input_formats=['%Y-%m-%d', '%d.%m.%Y'], required=False)
tag = forms.CharField(label=u'Теги', widget=forms.HiddenInput(), required=False)
@@ -63,12 +67,8 @@ class _BlogForm(forms.Form):
# fill translated fields and save object
fill_with_signal(Article, article, data)
# fill manytomany fields
- if self.type == Article.blog:
- article.blog_theme.clear()
- article.blog_theme.add(*ThemeBlog.objects.filter(id__in=data['theme']))
- else:
- article.theme.clear()
- article.theme.add(*Theme.objects.filter(id__in=data['theme']))
+ article.theme.clear()
+ article.theme.add(*Theme.objects.filter(id__in=data['theme']))
article.tag.clear()
article.tag.add(*Tag.objects.filter(id__in=data['tag']))
#for item in data['theme']:
@@ -301,9 +301,11 @@ class BlogFilterForm(forms.Form):
create dynamical translated fields fields
"""
super(BlogFilterForm, self).__init__(*args, **kwargs)
- ids = set([item['blog_theme'] for item in list(Article.objects.blogs().filter(blog_theme__isnull=False).values('blog_theme'))])
- self.fields['theme'] = forms.MultipleChoiceField(label=_(u'Тематика:'), required=False,
- choices=[(item.id, item.name) for item in ThemeBlog.objects.language().filter(id__in=ids)])
+ ids = set(Article.objects.filter(type=Article.blog, theme__isnull=False).values_list('theme', flat=True))
+ # ids = set([item['theme'] for item in list(Article.objects.blogs().filter(theme__isnull=False).values('theme'))])
+ 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):
diff --git a/article/models.py b/article/models.py
index bf6d7079..7532986a 100644
--- a/article/models.py
+++ b/article/models.py
@@ -31,7 +31,6 @@ class Article(TranslatableModel):
old_id = models.IntegerField(verbose_name=_(u'Id из старой базы'), blank=True, null=True)
logo = ImageField(verbose_name=_(u'Логотип'), upload_to='articles_preview', blank=True)
theme = models.ManyToManyField('theme.Theme', verbose_name=_(u'Тематики'))
- blog_theme = models.ManyToManyField('theme.ThemeBlog', verbose_name=_(u'Тематики для блогов'), )
tag = models.ManyToManyField('theme.Tag', blank=True, null=True, verbose_name=_(u'Теги'), )
author = models.ForeignKey('accounts.User', verbose_name=_(u'Автор'),
on_delete=models.PROTECT, related_name='articles')
diff --git a/article/views.py b/article/views.py
index bea635c3..6e6122ea 100644
--- a/article/views.py
+++ b/article/views.py
@@ -7,7 +7,7 @@ from django.utils.translation import ugettext as _
from functions.custom_views import ListView
from models import Article
from forms import BlogFilterForm, NewsFilterForm
-from theme.models import Tag, ThemeBlog
+from theme.models import Tag, Theme
from meta.views import MetadataMixin
@@ -80,7 +80,7 @@ class BlogList(MetadataMixin, ListView):
themes = self.request.GET.getlist('theme')
if themes:
- qs = qs.filter(blog_theme__id__in=themes)
+ qs = qs.filter(theme__id__in=themes)
tags = self.request.GET.getlist('tag')
if u'' in tags:
@@ -192,10 +192,10 @@ class BlogsFilterCatalog(MetadataMixin, ListView):
self.filter_object = tag
qs = Article.objects.blogs().filter(tag=tag)
else:
- theme = get_object_or_404(ThemeBlog, url=slug)
+ theme = get_object_or_404(Theme, url=slug)
self.kwargs['theme'] = theme
self.filter_object = theme
- qs = Article.objects.blogs().filter(blog_theme = theme)
+ qs = Article.objects.blogs().filter(theme=theme)
year = self.kwargs.get('year')
if year:
diff --git a/templates/admin/includes/admin_nav.html b/templates/admin/includes/admin_nav.html
index 1b0347e3..6dae6a4e 100644
--- a/templates/admin/includes/admin_nav.html
+++ b/templates/admin/includes/admin_nav.html
@@ -41,7 +41,7 @@
Страна
Город
Тематики
- Тематики для блогов
+ {# Тематики для блогов #}
Теги
Услуги
Управление услугами
diff --git a/templates/admin/theme/theme_add.html b/templates/admin/theme/theme_add.html
index 1131164b..347e2c37 100644
--- a/templates/admin/theme/theme_add.html
+++ b/templates/admin/theme/theme_add.html
@@ -35,15 +35,6 @@
{{ form.types.errors }}
- {# blogtheme_linking #}
-
-
-
- {{ form.blogtheme_linking }}
-
{{ form.blogtheme_linking.errors }}
-
{{ form.blogtheme_linking.help_text }}
-
-
{# main_title #}
{% with field='main_title' form=form languages=languages %}
{% include 'admin/forms/multilang.html' %}
diff --git a/templates/client/article/article.html b/templates/client/article/article.html
index 9b6050e9..b2a7ca5f 100644
--- a/templates/client/article/article.html
+++ b/templates/client/article/article.html
@@ -19,7 +19,7 @@
{% include 'client/includes/article/article_logo.html' with obj=object %}
{{ object.main_title }}
- {{ object.publish_date|date:"d E Y" }}{% if object.blog_theme.all.exists %}{% include 'client/includes/article_theme.html' with obj=object %}{% endif %}
+ {{ object.publish_date|date:"d E Y" }}{% if object.theme.all.exists %}{% include 'client/includes/article_theme.html' with obj=object %}{% endif %}
{% if request.user.is_admin %}
{% trans 'изменить' %}
{% endif %}
diff --git a/templates/client/includes/article_theme.html b/templates/client/includes/article_theme.html
index 039ee796..0a02a1f2 100644
--- a/templates/client/includes/article_theme.html
+++ b/templates/client/includes/article_theme.html
@@ -1,6 +1,6 @@
-{% with theme=obj.blog_theme.all %}
- {% for theme in obj.blog_theme.all %}
+{% with theme=obj.theme.all %}
+ {% for theme in obj.theme.all %}
{{ theme.name }}{% if forloop.counter != themes|length %},{% endif %}
{% endfor %}
-{% endwith %}
\ No newline at end of file
+{% endwith %}
diff --git a/theme/admin.py b/theme/admin.py
index 30d7886a..5f92fd5b 100644
--- a/theme/admin.py
+++ b/theme/admin.py
@@ -1,4 +1,4 @@
-#custom views
+# -*- coding: utf-8 -*-
import json
from django.conf import settings
@@ -8,16 +8,6 @@ from django.core.urlresolvers import reverse_lazy
from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import render_to_response
from django.views.generic import CreateView, DeleteView, UpdateView
-# -*- coding: utf-8 -*-
-#forms and models
-from forms import (
- TagDeleteForm,
- TagFilterForm,
- TagForm,
- ThemeDeleteForm,
- ThemeFilterForm,
- ThemeForm
-)
from functions.admin_views import AdminListView
from functions.custom_views import (
ListView,
@@ -27,8 +17,15 @@ from functions.custom_views import (
)
from functions.views_help import get_referer
-from .forms import ThemeBlogForm
-from .models import Tag, Theme, ThemeBlog
+from .forms import (
+ TagDeleteForm,
+ TagFilterForm,
+ TagForm,
+ ThemeDeleteForm,
+ ThemeFilterForm,
+ ThemeForm
+)
+from .models import Tag, Theme
def theme_all(request):
@@ -42,15 +39,19 @@ def tag_all(request):
def theme_add(request):
return add_object(request, ThemeForm, 'theme_add.html', '/admin/theme/theme/all')
+
def tag_add(request):
return add_object(request, TagForm, 'tag_add.html', '/admin/theme/tag/all')
+
def theme_delete(request, theme_id):
return delete_object(request, Theme, ThemeDeleteForm, theme_id, '/admin/theme/theme/all')
+
def tag_delete(request, tag_id):
return delete_object(request, Tag, TagDeleteForm, tag_id, '/admin/theme/tag/all')
+
@login_required
def theme_copy(request, theme_id):
@@ -71,6 +72,7 @@ def tag_copy(request, tag_id):
tag.clone()
return HttpResponseRedirect(get_referer(request))
+
@login_required
def theme_change(request, theme_id=None):
try:
@@ -86,8 +88,6 @@ def theme_change(request, theme_id=None):
data = {}
#bitfeild
data['types'] = [item for item, bool in theme.types if bool==True]
- data['blogtheme_linking'] = theme.blogtheme_linking
-
#data from translated fields
for code, name in settings.LANGUAGES:
@@ -112,6 +112,7 @@ def theme_change(request, theme_id=None):
return render_to_response('theme_add.html', args)
+
@login_required
def tag_change(request, tag_id=None):
try:
@@ -185,66 +186,3 @@ class TagListView(AdminListView):
template_name = 'admin/theme/tag_list.html'
form_class = TagFilterForm
model = Tag
-
-
-
-
-class ThemeBlogListView(ListView):
- template_name = 'admin/theme/theme_blog_list.html'
- model = ThemeBlog
- paginate_by = settings.ADMIN_PAGINATION
-
-
-class ThemeBlogDeleteView(DeleteView):
- template_name = "admin/theme/theme_blog_confirm_delete.html"
- model = ThemeBlog
- success_url = reverse_lazy("theme_blog_all")
- pk_url_kwarg = "theme_id"
-
-
-def blog_theme_add(request):
- return add_object(request, ThemeBlogForm, 'theme_blog_new.html', reverse_lazy("theme_blog_all"))
-
-@login_required
-def blog_theme_change(request, theme_id=None):
- try:
- theme = ThemeBlog.objects.get(id=theme_id)
- except:
- return HttpResponseRedirect('theme_blog_all')
- if request.POST:
- form = ThemeBlogForm(request.POST)
- if form.is_valid():
- form.save(theme_id)
- return HttpResponseRedirect(reverse_lazy("theme_blog_all"))
- else:
- data = {}
- for code, name in settings.LANGUAGES:
- obj = ThemeBlog._meta.translations_model.objects.get(language_code = code,master__id=theme_id) #access to translated fields
- data['name_%s'%code] = obj.name
- data['description_%s'%code] = obj.description
- data['main_title_%s'%code] = obj.main_title
- form = ThemeBlogForm(data)
- args = {}
- args.update(csrf(request))
- args['form'] = form
- args['languages'] = settings.LANGUAGES
- args['theme_id'] = theme_id
-
- return render_to_response('admin/theme/theme_blog_new.html', args)
-
-
-
-# ======================================================
-class ThemeBlogUpdateView(UpdateView):
- template_name = "admin/theme/theme_blog_new.html"
- model = ThemeBlog
- form_class = ThemeBlogForm
- success_url = reverse_lazy("theme_blog_all")
- pk_url_kwarg = "theme_id"
-
-
-class ThemeBlogCreateView(CreateView):
- template_name = "admin/theme/theme_blog_new.html"
- model = ThemeBlog
- form_class = ThemeBlogForm
- success_url = reverse_lazy("theme_blog_all")
diff --git a/theme/admin_urls.py b/theme/admin_urls.py
index 423c6dc4..395ed46a 100644
--- a/theme/admin_urls.py
+++ b/theme/admin_urls.py
@@ -1,26 +1,25 @@
# -*- coding: utf-8 -*-
-from django.conf.urls import patterns, include, url
-from admin import TagListView, ThemeListView
-from .admin import ThemeBlogCreateView, ThemeBlogUpdateView, ThemeBlogDeleteView, ThemeBlogListView
+from django.conf.urls import include, patterns, url
+from .admin import TagListView, ThemeListView
urlpatterns = patterns('theme.admin',
+ # add
url(r'^theme/add.*/$', 'theme_add'),
url(r'^tag/add.*/$', 'tag_add'),
- url(r'^blog_theme/add/$', 'blog_theme_add', name = 'theme_blog_new'),
+ # delete
url(r'^theme/delete/(?P\d+)/$', 'theme_delete'),
url(r'^tag/delete/(?P\d+)/$', 'tag_delete'),
- url(r'^blog_theme/delete/(?P\d+)/$', ThemeBlogDeleteView.as_view(), name = 'theme_blog_delete'),
+ # change
url(r'^theme/change/(?P\d+).*/$', 'theme_change'),
- url(r'^blog_theme/change/(?P\d+).*/$', 'blog_theme_change', name= "theme_blog_change"),
url(r'^tag/change/(?P\d+).*/$', 'tag_change'),
+ # copy
url(r'^theme/copy/(?P\d+).*/$', 'theme_copy'),
url(r'^tag/copy/(?P\d+).*/$', 'tag_copy'),
- #url(r'^theme/all/$', 'theme_all'),
- #url(r'^tag/all/$', 'tag_all'),
+ # all
url(r'^theme/all/$', ThemeListView.as_view()),
- url(r'^blog_theme/all/$', ThemeBlogListView.as_view(), name="theme_blog_all"),
url(r'^tag/all/$', TagListView.as_view()),
+ # search
url(r'^tag/search/$', 'search_tag'),
url(r'^tag/search-without-theme/$', 'search2'),
)
diff --git a/theme/forms.py b/theme/forms.py
index 1c9e2831..a344c5ed 100644
--- a/theme/forms.py
+++ b/theme/forms.py
@@ -10,15 +10,11 @@ from functions.form_check import translit_with_separator
from functions.translate import fill_with_signal
from hvad.forms import TranslatableModelForm
-from .models import Tag, Theme, ThemeBlog
+from .models import Tag, Theme
class ThemeForm(forms.Form):
types = forms.MultipleChoiceField(label='Тип', required=False, choices=Theme.FLAGS, widget=forms.CheckboxSelectMultiple())
- blogtheme_linking = forms.ModelChoiceField(
- label=u'тема для блога', queryset=ThemeBlog.objects.all(), cache_choices=True, required=False,
- help_text=u'''Выберите тему для блога, которая будет заменена на текущую тему.'''
- u''' После миграции данных это поле будет удалено, а у всех статей у которых указана выбранная тема, будет заменена на текущую.''')
def __init__(self, *args, **kwargs):
super(ThemeForm, self).__init__(*args, **kwargs)
@@ -60,7 +56,6 @@ class ThemeForm(forms.Form):
#generates bitfield
flag = reduce(lambda x,y: x|y, (getattr(Theme.types, item) for item in data['types']))
theme.types = flag
- theme.blogtheme_linking = data['blogtheme_linking']
if theme.pk and theme.url:
theme.save()
@@ -148,45 +143,3 @@ class ThemeFilterForm(AdminFilterForm):
class TagFilterForm(AdminFilterForm):
model = Tag
-
-
-class _ThemeBlogForm(TranslatableModelForm):
- class Meta:
- model = ThemeBlog
- fields = ['url', 'name', 'main_title', 'description', 'inflect']
- widgets = {'url':forms.TextInput(attrs={'required':False})}
-
- def save(self, commit= True):
- if not 'url' in self.cleaned_data:
- self.cleaned_data['url'] = translit_with_separator(self.cleaned_data['name'])
- return super(_ThemeBlogForm, self).save(commit=True)
-
-
-class ThemeBlogForm(forms.Form):
-
- def __init__(self, *args, **kwargs):
- super(ThemeBlogForm, self).__init__(*args, **kwargs)
- # creates translated form fields, example: name_ru, name_en
- # len(10) is a hack for detect if settings.LANGUAGES is not configured it return all langs
- if len(settings.LANGUAGES) in range(10):
- for lid, (code, name) in enumerate(settings.LANGUAGES):
- # using enumerate for detect iteration number
- # first iteration is a default lang so it required fields
- required = True if lid == 0 else False
- self.fields['name_%s' % code] = forms.CharField(label='Название', required=required)
- self.fields['main_title_%s' % code] = forms.CharField(label='Заголовок', required=required)
- self.fields['description_%s' % code] = forms.CharField(label='Описание', required=False, widget=CKEditorWidget)#with saving form
-
- def save(self, id=None):
- data = self.cleaned_data
- if not id:
- theme = ThemeBlog()
- else:
- theme = ThemeBlog.objects.get(id=id)
- if not getattr(theme, 'url'):
- theme.url = translit_with_separator(data['name_ru'].strip()).lower()
-
- fill_with_signal(ThemeBlog, theme, data)
- if not theme.url:
- theme.url = translit_with_separator(theme.name)
- theme.save()
diff --git a/theme/management/commands/themeblog_to_blog.py b/theme/management/commands/themeblog_to_blog.py
deleted file mode 100644
index 4a720ec9..00000000
--- a/theme/management/commands/themeblog_to_blog.py
+++ /dev/null
@@ -1,14 +0,0 @@
-from django.core.management.base import BaseCommand, CommandError
-from theme.models import Theme, ThemeBlog
-from article.models import Article
-
-
-class Command(BaseCommand):
- def handle(self, *args, **options):
- for article in Article.objects.filter(type=Article.blog).prefetch_related('blog_theme'):
- blogthemes = article.blog_theme.all().values_list('id', flat=True)
- themes = Theme.objects.filter(
- types=Theme.types.article,
- blogtheme_linking_id__in=blogthemes)
- article.theme.clear()
- article.theme.add(*themes)
diff --git a/theme/models.py b/theme/models.py
index 04e1a986..69d1f3db 100644
--- a/theme/models.py
+++ b/theme/models.py
@@ -43,8 +43,6 @@ class Theme(TranslatableModel):
url = models.SlugField(unique=True, max_length=255)
old_url = models.SlugField(unique=True, max_length=255)
types = BitField([k for k, v in FLAGS])
- blogtheme_linking = models.ForeignKey('ThemeBlog', verbose_name=u'тема для блога', null=True, default=None,
- help_text=u'Выберите тему для блога, которая будет заменена на текущую тему')
#translated fields
translations = TranslatedFields(
name = models.CharField(max_length=255),
@@ -142,29 +140,6 @@ class Theme(TranslatableModel):
return parent
-class ThemeBlog(TranslatableModel):
-
- url = models.SlugField(unique=True, max_length=255)
-
- translations = TranslatedFields(
- name=models.CharField(max_length=255),
- main_title=models.CharField(max_length=255, blank=True),
- description=models.TextField(blank=True)
- )
-
- inflect = models.CharField(max_length=255, blank=True)
-
- def __unicode__(self):
- return self.lazy_translation_getter('name', unicode(self.pk))
-
- def get_all_names(self):
- return [item['name'] for item in self.translations.all().values('name')]
-
- def get_index_text(self):
- translation.activate('ru')
- return ' '.join(self.get_all_names())
-
-
class Tag(TranslatableModel):
"""
Create Tag model
@@ -271,7 +246,6 @@ def pre_save_handler(sender, **kwargs):
pre_save.connect(pre_save_handler, sender=Tag)
post_save.connect(post_save_handler, sender=Theme)
-post_save.connect(post_save_handler, sender=ThemeBlog)
post_save.connect(post_save_handler, sender=Tag)