From 1ef3efd3131720e7a82bf16e8a7fbe2b2cd5db7a Mon Sep 17 00:00:00 2001 From: Ivan Kovalkovskyi Date: Fri, 9 Oct 2015 16:34:50 +0300 Subject: [PATCH] theme blog bug fixed --- article/forms.py | 2 +- templates/admin/theme/theme_blog_new.html | 29 +++++++------- theme/admin.py | 47 +++++++++++++++++++---- theme/admin_urls.py | 4 +- theme/forms.py | 34 +++++++++++++++- theme/models.py | 1 + 6 files changed, 91 insertions(+), 26 deletions(-) diff --git a/article/forms.py b/article/forms.py index e287fd45..88849b80 100644 --- a/article/forms.py +++ b/article/forms.py @@ -21,7 +21,7 @@ class BlogForm(forms.Form): type = Article.blog theme = forms.ModelMultipleChoiceField(label='Тематики', queryset=ThemeBlog.objects.all(), required=False, widget=forms.SelectMultiple(attrs={'style':'width: 550px'})) - slug = forms.SlugField(label=u'URL', max_length=255, min_length=1) + 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) logo = forms.ImageField(label=u'Лого', required=False) diff --git a/templates/admin/theme/theme_blog_new.html b/templates/admin/theme/theme_blog_new.html index fe5406b8..bd9fe715 100644 --- a/templates/admin/theme/theme_blog_new.html +++ b/templates/admin/theme/theme_blog_new.html @@ -7,7 +7,6 @@ {# selects #} - @@ -15,25 +14,27 @@ {% block body %} -
{% csrf_token %}{{ form.errors }} + {% csrf_token %}
- {% if object %} Изменить {% else %} Добавить {% endif %}тему + {% if theme_id %} Изменить {% else %} Добавить {% endif %}тему

Информация

- {% for field in form %} - - - - {% endfor %} + {# name #} + {% with field='name' form=form languages=languages %} + {% include 'admin/forms/multilang.html' %} + {% endwith %} + + {# main_title #} + {% with field='main_title' form=form languages=languages %} + {% include 'admin/forms/multilang.html' %} + {% endwith %} + {# description #} + {% with field='description' form=form languages=languages %} + {% include 'admin/forms/multilang.html' %} + {% endwith %}
diff --git a/theme/admin.py b/theme/admin.py index 8914587f..d2288161 100644 --- a/theme/admin.py +++ b/theme/admin.py @@ -182,13 +182,46 @@ class ThemeBlogListView(ListView): paginate_by = settings.ADMIN_PAGINATION -class ThemeBlogCreateView(CreateView): - template_name = "admin/theme/theme_blog_new.html" +class ThemeBlogDeleteView(DeleteView): + template_name = "admin/theme/theme_blog_confirm_delete.html" model = ThemeBlog - form_class = ThemeBlogForm 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 @@ -197,8 +230,8 @@ class ThemeBlogUpdateView(UpdateView): pk_url_kwarg = "theme_id" -class ThemeBlogDeleteView(DeleteView): - template_name = "admin/theme/theme_blog_confirm_delete.html" +class ThemeBlogCreateView(CreateView): + template_name = "admin/theme/theme_blog_new.html" model = ThemeBlog - success_url = reverse_lazy("theme_blog_all") - pk_url_kwarg = "theme_id" + form_class = ThemeBlogForm + success_url = reverse_lazy("theme_blog_all") \ No newline at end of file diff --git a/theme/admin_urls.py b/theme/admin_urls.py index 0caf5c87..423c6dc4 100644 --- a/theme/admin_urls.py +++ b/theme/admin_urls.py @@ -7,12 +7,12 @@ from .admin import ThemeBlogCreateView, ThemeBlogUpdateView, ThemeBlogDeleteView urlpatterns = patterns('theme.admin', url(r'^theme/add.*/$', 'theme_add'), url(r'^tag/add.*/$', 'tag_add'), - url(r'^blog_theme/add/$', ThemeBlogCreateView.as_view(), name = 'theme_blog_new'), + url(r'^blog_theme/add/$', 'blog_theme_add', name = 'theme_blog_new'), 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'), url(r'^theme/change/(?P\d+).*/$', 'theme_change'), - url(r'^blog_theme/change/(?P\d+).*/$', ThemeBlogUpdateView.as_view(), name= "theme_blog_change"), + url(r'^blog_theme/change/(?P\d+).*/$', 'blog_theme_change', name= "theme_blog_change"), url(r'^tag/change/(?P\d+).*/$', 'tag_change'), url(r'^theme/copy/(?P\d+).*/$', 'theme_copy'), url(r'^tag/copy/(?P\d+).*/$', 'tag_copy'), diff --git a/theme/forms.py b/theme/forms.py index 5f166b04..7571a784 100644 --- a/theme/forms.py +++ b/theme/forms.py @@ -149,7 +149,7 @@ from hvad.forms import TranslatableModelForm from .models import ThemeBlog -class ThemeBlogForm(TranslatableModelForm): +class _ThemeBlogForm(TranslatableModelForm): class Meta: model = ThemeBlog fields = ['url', 'name', 'main_title', 'description', 'inflect'] @@ -158,4 +158,34 @@ class ThemeBlogForm(TranslatableModelForm): 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) \ No newline at end of file + 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/models.py b/theme/models.py index 93908fd7..dd01de1c 100644 --- a/theme/models.py +++ b/theme/models.py @@ -273,6 +273,7 @@ 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)