From 71fbef7f45ff94ae35571c304c435e4a7a9bd752 Mon Sep 17 00:00:00 2001 From: Emilie Date: Wed, 5 Oct 2016 18:03:34 +0200 Subject: [PATCH] Article : add Audio/Video block and links to CustomPage --- app/organization/magazine/admin.py | 14 ++++++- app/organization/magazine/forms.py | 3 +- .../0010_articleaudio_articlevideo.py | 39 +++++++++++++++++++ app/organization/magazine/models.py | 11 ++++++ app/organization/magazine/translation.py | 12 ++++++ app/organization/magazine/views.py | 4 +- .../magazine/article/article_detail.html | 8 ++++ 7 files changed, 88 insertions(+), 3 deletions(-) create mode 100644 app/organization/magazine/migrations/0010_articleaudio_articlevideo.py diff --git a/app/organization/magazine/admin.py b/app/organization/magazine/admin.py index 462c5b15..d397a160 100644 --- a/app/organization/magazine/admin.py +++ b/app/organization/magazine/admin.py @@ -12,6 +12,16 @@ class ArticleImageInline(TabularDynamicInlineAdmin): model = ArticleImage +class ArticleVideoInline(StackedDynamicInlineAdmin): + + model = ArticleVideo + + +class ArticleAudioInline(StackedDynamicInlineAdmin): + + model = ArticleAudio + + class ArticleAdmin(admin.ModelAdmin): model = Article @@ -41,7 +51,9 @@ class ArticleAdminDisplayable(DisplayableAdmin): filter_horizontal = ['categories',] inlines = [ArticleImageInline, ArticlePersonAutocompleteInlineAdmin, - DynamicContentArticleInline] + DynamicContentArticleInline, + ArticleVideoInline, + ArticleAudioInline] class BriefAdmin(admin.ModelAdmin): #OrderableTabularInline diff --git a/app/organization/magazine/forms.py b/app/organization/magazine/forms.py index 5f5e6392..3d4896e1 100644 --- a/app/organization/magazine/forms.py +++ b/app/organization/magazine/forms.py @@ -41,7 +41,8 @@ class DynamicContentArticleForm(autocomplete.FutureModelForm): content_object = dal_queryset_sequence.fields.QuerySetSequenceModelField( queryset=autocomplete.QuerySetSequence( Article.objects.all(), - Event.objects.all() + Event.objects.all(), + CustomPage.objects.all() ), required=False, widget=dal_select2_queryset_sequence.widgets.QuerySetSequenceSelect2('dynamic-content-article'), diff --git a/app/organization/magazine/migrations/0010_articleaudio_articlevideo.py b/app/organization/magazine/migrations/0010_articleaudio_articlevideo.py new file mode 100644 index 00000000..9e081b90 --- /dev/null +++ b/app/organization/magazine/migrations/0010_articleaudio_articlevideo.py @@ -0,0 +1,39 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.7 on 2016-10-05 15:54 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('organization-media', '0003_auto_20160929_1835'), + ('organization-magazine', '0009_auto_20160928_1858'), + ] + + operations = [ + migrations.CreateModel( + name='ArticleAudio', + fields=[ + ('audio_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='organization-media.Audio')), + ('article', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='audios', to='organization-magazine.Article', verbose_name='article')), + ], + options={ + 'abstract': False, + }, + bases=('organization-media.audio',), + ), + migrations.CreateModel( + name='ArticleVideo', + fields=[ + ('video_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='organization-media.Video')), + ('article', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='videos', to='organization-magazine.Article', verbose_name='article')), + ], + options={ + 'abstract': False, + }, + bases=('organization-media.video',), + ), + ] diff --git a/app/organization/magazine/models.py b/app/organization/magazine/models.py index 993748b7..e7e355bb 100644 --- a/app/organization/magazine/models.py +++ b/app/organization/magazine/models.py @@ -11,6 +11,7 @@ from mezzanine.core.models import RichText, Displayable, Slugged from mezzanine.pages.models import Page from mezzanine.blog.models import BlogPost from organization.network.models import Department, PersonListBlock +from organization.media.models import Audio, Video from organization.core.models import * @@ -36,6 +37,16 @@ class ArticleImage(Image): order_with_respect_to = "article" +class ArticleAudio(Audio): + + article = models.ForeignKey(Article, verbose_name=_('article'), related_name='audios', blank=True, null=True, on_delete=models.SET_NULL) + + +class ArticleVideo(Video): + + article = models.ForeignKey(Article, verbose_name=_('article'), related_name='videos', blank=True, null=True, on_delete=models.SET_NULL) + + class Brief(Displayable, RichText): #Orderable text_button = models.CharField(blank=True, max_length=150, null=False, verbose_name=_('text button')) diff --git a/app/organization/magazine/translation.py b/app/organization/magazine/translation.py index 266608bf..ac7b7a09 100644 --- a/app/organization/magazine/translation.py +++ b/app/organization/magazine/translation.py @@ -41,3 +41,15 @@ class ArticlePersonListBlockInlineTranslationOptions(TranslationOptions): class DynamicContentArticleTranslationOptions(TranslationOptions): pass + + +@register(ArticleAudio) +class ArticleAudioTranslationOptions(TranslationOptions): + + pass + + +@register(ArticleVideo) +class ArticleVideoTranslationOptions(TranslationOptions): + + pass diff --git a/app/organization/magazine/views.py b/app/organization/magazine/views.py index cded9354..e19a622c 100644 --- a/app/organization/magazine/views.py +++ b/app/organization/magazine/views.py @@ -113,12 +113,14 @@ class DynamicContentArticleView(Select2QuerySetSequenceView): articles = Article.objects.all() events = Event.objects.all() + pages = CustomPage.objects.all() if self.q: articles = articles.filter(title__icontains=self.q) events = events.filter(title__icontains=self.q) + pages = pages.filter(title__icontains=self.q) - qs = autocomplete.QuerySetSequence(articles, events ) + qs = autocomplete.QuerySetSequence(articles, events, pages) if self.q: # This would apply the filter on all the querysets diff --git a/app/templates/magazine/article/article_detail.html b/app/templates/magazine/article/article_detail.html index 8d0941ed..ac5b2ad4 100644 --- a/app/templates/magazine/article/article_detail.html +++ b/app/templates/magazine/article/article_detail.html @@ -76,6 +76,14 @@ {% endwith %} {% endblock %} +{% block page_audio %} + {{ block.super }} +{% endblock %} + +{% block page_video %} + {{ block.super }} +{% endblock %} + {% block page_person_list %} {% for article_custom_person_list_block_inline in article.article_person_list_block_inlines.all %} {% with article_custom_person_list_block_inline.person_list_block as person_list_block %} -- 2.39.5