From 9c263235dda6666273322e509b277dd2e245590b Mon Sep 17 00:00:00 2001 From: Ivan Kovalkovskyi Date: Thu, 8 Oct 2015 13:48:37 +0300 Subject: [PATCH] added possibility to define url for blog and news --- article/admin.py | 3 ++- article/forms.py | 16 ++++++++++++---- article/models.py | 8 ++------ templates/admin/article/blog_form.html | 10 +++++++++- 4 files changed, 25 insertions(+), 12 deletions(-) diff --git a/article/admin.py b/article/admin.py index 377f3b13..29b59839 100644 --- a/article/admin.py +++ b/article/admin.py @@ -142,6 +142,7 @@ class BlogList(ListView): context['blog_flag'] = True return context + class BlogView(FormView): form_class = BlogForm template_name = 'article/blog_form.html' @@ -162,7 +163,6 @@ class BlogView(FormView): form.save(author, article=self.obj) return HttpResponseRedirect(self.success_url) - def get_form(self, form_class): if self.request.POST: return super(BlogView, self).get_form(form_class) @@ -170,6 +170,7 @@ class BlogView(FormView): if self.obj: article = self.obj data = {} + data['slug'] = article.slug data['theme'] = [item.id for item in article.blog_theme.all()] if article.exposition: data['exposition'] = article.exposition.id diff --git a/article/forms.py b/article/forms.py index d7c2fcd8..e287fd45 100644 --- a/article/forms.py +++ b/article/forms.py @@ -21,9 +21,11 @@ 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) 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) + def __init__(self, *args, **kwargs): """ create dynamical translated fields fields @@ -49,21 +51,26 @@ class BlogForm(forms.Form): def save(self, author, article=None): data = self.cleaned_data - #create new Article object or get exists + # create new Article object or get exists if not article: article = Article() article.author = author article.type = self.type + article.slug = data.get('slug') if data['logo']: article.logo = data['logo'] article.publish_date = data['publish_date'] # fill translated fields and save object fill_with_signal(Article, article, data) # fill manytomany fields - article.blog_theme.clear() + 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.tag.clear() - article.blog_theme.add(*ThemeBlog.objects.filter(id__in=data['theme'])) article.tag.add(*Tag.objects.filter(id__in=data['tag'])) #for item in data['theme']: # article.theme.add(item.id)#.id cause select uses queryset @@ -92,7 +99,8 @@ class NewsForm(BlogForm): type = Article.news exposition = forms.CharField(label=u'Выставка', widget=forms.HiddenInput(), required=False) conference = forms.CharField(label=u'Конференция', widget=forms.HiddenInput(), required=False) - + theme = forms.ModelMultipleChoiceField(label='Тематики', queryset=Theme.objects.all(), required=False, + widget=forms.SelectMultiple(attrs={'style':'width: 550px'})) #exposition = forms.ModelChoiceField(label = u'Выставка', required=False, queryset=Exposition.objects.all()) #conference = forms.ModelChoiceField(label = u'Конференция', required=False, queryset=Conference.objects.all()) diff --git a/article/models.py b/article/models.py index 4a3e77f2..f2cf06dc 100644 --- a/article/models.py +++ b/article/models.py @@ -147,15 +147,12 @@ class Article(TranslatableModel): return self.conference return None - def save(self, *args, **kwargs): - # If no slug is provided, generates one before saving. if not self.slug: self.slug = self.generate_unique_slug() - - #Set the description field on save. - #if self.gen_description: + # Set the description field on save. + # if self.gen_description: # self.description = strip_tags(self.description_from_content()) super(Article, self).save(*args, **kwargs) @@ -188,7 +185,6 @@ class Article(TranslatableModel): #print self.lazy_translation_getter('main_title', self.pk) return u'%s'%self.lazy_translation_getter('main_title', self.pk) - def _get_next_or_previous_by_publish_date(self, is_next, **kwargs): """ Retrieves next or previous object by publish date. We implement diff --git a/templates/admin/article/blog_form.html b/templates/admin/article/blog_form.html index 16a15c83..057b565d 100644 --- a/templates/admin/article/blog_form.html +++ b/templates/admin/article/blog_form.html @@ -51,7 +51,15 @@ {{ form.publish_date.errors }} - + {% if not article %} +
+ +
+ {{ form.slug }} + {{ form.slug.errors }} +
+
+ {% endif %} {# theme #}