]> git.parisson.com Git - mezzo.git/commitdiff
Article : add Audio/Video block and links to CustomPage
authorEmilie <zawadzki@ircam.fr>
Wed, 5 Oct 2016 16:03:34 +0000 (18:03 +0200)
committerEmilie <zawadzki@ircam.fr>
Wed, 5 Oct 2016 16:03:34 +0000 (18:03 +0200)
app/organization/magazine/admin.py
app/organization/magazine/forms.py
app/organization/magazine/migrations/0010_articleaudio_articlevideo.py [new file with mode: 0644]
app/organization/magazine/models.py
app/organization/magazine/translation.py
app/organization/magazine/views.py
app/templates/magazine/article/article_detail.html

index 462c5b15d421e5f6f69e0da3dcd02e54115fcd4b..d397a1605a1fce04a51562136bfba301d09d6661 100644 (file)
@@ -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
index 5f5e6392762d368ea08e0708851e6815a925017e..3d4896e16e5553a495ce8a793f5b551be4a5acc2 100644 (file)
@@ -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 (file)
index 0000000..9e081b9
--- /dev/null
@@ -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',),
+        ),
+    ]
index 993748b704151358d7b2411377de077db9a9bed3..e7e355bb65c9f1a51c600751f139783edd3d9309 100644 (file)
@@ -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'))
index 266608bf2567c430c011bd947ae3104c715fb04e..ac7b7a098a3c1b7206fe41535959db4d84e0e83b 100644 (file)
@@ -41,3 +41,15 @@ class ArticlePersonListBlockInlineTranslationOptions(TranslationOptions):
 class DynamicContentArticleTranslationOptions(TranslationOptions):
 
     pass
+
+
+@register(ArticleAudio)
+class ArticleAudioTranslationOptions(TranslationOptions):
+
+    pass
+
+
+@register(ArticleVideo)
+class ArticleVideoTranslationOptions(TranslationOptions):
+
+    pass
index cded9354e443faee9d0dae724f4532c5000a3bd8..e19a622c51d2da03fd66d4055f615a89c12f8113 100644 (file)
@@ -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
index 8d0941ed2def132d2520176a6bdb448715d961cb..ac5b2ad4c9907c8234b2153298fce0d7a9395690 100644 (file)
   {% 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 %}