]> git.parisson.com Git - mezzo.git/commitdiff
Article: add Person List Block
authorEmilie <zawadzki@ircam.fr>
Fri, 23 Sep 2016 15:52:10 +0000 (17:52 +0200)
committerEmilie <zawadzki@ircam.fr>
Fri, 23 Sep 2016 15:52:10 +0000 (17:52 +0200)
app/organization/magazine/admin.py
app/organization/magazine/forms.py
app/organization/magazine/migrations/0003_articlepersonlistblockinline.py [new file with mode: 0644]
app/organization/magazine/models.py
app/organization/magazine/translation.py
app/organization/network/forms.py
app/templates/magazine/article/article_detail.html

index 739122558e2d439f07a131e6e2119cd4e0d53245..2499e922dfca9559823eaf2d8cbb229a6eba8fa9 100644 (file)
@@ -4,8 +4,8 @@ from copy import deepcopy
 from mezzanine.core.admin import *
 from mezzanine.pages.admin import PageAdmin
 #from orderable.admin import OrderableTabularInline #OrderableAdmin,
-from organization.magazine.models import Article, Brief, Topic, ArticleImage
-from organization.magazine.forms import BriefForm
+from organization.magazine.models import Article, Brief, Topic, ArticleImage, ArticlePersonListBlockInline
+from organization.magazine.forms import BriefForm, ArticlePersonListForm
 
 
 class ArticleImageInline(TabularDynamicInlineAdmin):
@@ -18,12 +18,18 @@ class ArticleAdmin(admin.ModelAdmin):
     model = Article
 
 
+class ArticlePersonAutocompleteInlineAdmin(TabularDynamicInlineAdmin):
+
+    model = ArticlePersonListBlockInline
+    form = ArticlePersonListForm
+
+
 class ArticleAdminDisplayable(DisplayableAdmin):
 
     fieldsets = deepcopy(ArticleAdmin.fieldsets)
     exclude = ('related_posts',)
     filter_horizontal = ['categories', 'related_articles', ]
-    inlines = [ArticleImageInline,]
+    inlines = [ArticleImageInline, ArticlePersonAutocompleteInlineAdmin]
 
 
 class BriefAdmin(admin.ModelAdmin): #OrderableTabularInline
index 0560c124502a93307ab226fc3f250c0f33632081..1a316d2bada12278606df66b7bf043fd6b1ac124 100644 (file)
@@ -1,10 +1,10 @@
 from dal import autocomplete
-
 import dal_queryset_sequence
 import dal_select2_queryset_sequence
-
-from organization.magazine.models import Article, Topic, Brief
+from django import forms
+from organization.magazine.models import Article, Topic, Brief, ArticlePersonListBlockInline
 from organization.pages.models import CustomPage
+from organization.network.models import PersonListBlock
 from mezzanine_agenda.models import Event
 
 class BriefForm(autocomplete.FutureModelForm):
@@ -22,3 +22,15 @@ class BriefForm(autocomplete.FutureModelForm):
     class Meta:
         model = Brief
         fields = ('__all__')
+
+
+class ArticlePersonListForm(forms.ModelForm):
+
+    person_list_block = forms.ModelChoiceField(
+        queryset=PersonListBlock.objects.all(),
+        widget=autocomplete.ModelSelect2(url='person-list-block-autocomplete')
+    )
+
+    class Meta:
+        model = ArticlePersonListBlockInline
+        fields = ('person_list_block',)
diff --git a/app/organization/magazine/migrations/0003_articlepersonlistblockinline.py b/app/organization/magazine/migrations/0003_articlepersonlistblockinline.py
new file mode 100644 (file)
index 0000000..7732533
--- /dev/null
@@ -0,0 +1,30 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.7 on 2016-09-23 15:38
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('organization-network', '0023_auto_20160921_2043'),
+        ('organization-magazine', '0002_auto_20160901_1737'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='ArticlePersonListBlockInline',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('title', models.CharField(max_length=1024, verbose_name='title')),
+                ('description', models.TextField(blank=True, verbose_name='description')),
+                ('article', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='article_person_list_block_inlines', to='organization-magazine.Article', verbose_name='Article')),
+                ('person_list_block', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='article_person_list_block_inlines', to='organization-network.PersonListBlock', verbose_name='Person List Block')),
+            ],
+            options={
+                'verbose_name': 'Person List',
+            },
+        ),
+    ]
index d3de1d8e4ec8abfe4da0640a29b8c3ae952b8bf1..12cf3762f9041704d2a313ba2d7452e79ef50aff 100644 (file)
@@ -10,7 +10,7 @@ from django.core.urlresolvers import reverse, reverse_lazy
 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
+from organization.network.models import Department, PersonListBlock
 from organization.core.models import *
 
 
@@ -73,3 +73,15 @@ class Topic(Page, RichText):
 
     class Meta:
         verbose_name = _('topic')
+
+
+class ArticlePersonListBlockInline(Titled):
+
+    article = models.ForeignKey(Article, verbose_name=_('Article'), related_name='article_person_list_block_inlines', blank=True, null=True, on_delete=models.SET_NULL)
+    person_list_block = models.ForeignKey(PersonListBlock, related_name='article_person_list_block_inlines', verbose_name=_('Person List Block'), blank=True, null=True)
+
+    class Meta:
+        verbose_name = _('Person List')
+
+    def __str__(self):
+        return self.title
index 3c53e1d17a9b81fa7aee2f8655e8ba4d73e07d6e..c030a31d334b54a735690489006ba523706f85b9 100644 (file)
@@ -4,7 +4,11 @@ from modeltranslation.translator import TranslationOptions
 from mezzanine.core.translation import (TranslatedSlugged,
                                         TranslatedDisplayable,
                                         TranslatedRichText)
-from organization.magazine.models import Article, Topic, Brief, ArticleImage
+from organization.magazine.models import (Article,
+                                          Topic,
+                                          Brief,
+                                          ArticleImage,
+                                          ArticlePersonListBlockInline)
 
 @register(Article)
 class ArticleTranslationOptions(TranslationOptions):
@@ -17,12 +21,20 @@ class BriefTranslationOptions(TranslationOptions):
 
     fields = ('text_button', )
 
+
 @register(Topic)
 class TopicTranslationOptions(TranslationOptions):
 
     fields = ()
 
+
 @register(ArticleImage)
 class ArticleImageTranslationOptions(TranslationOptions):
 
     fields = ('description',)
+
+
+@register(ArticlePersonListBlockInline)
+class ArticlePersonListBlockInlineTranslationOptions(TranslationOptions):
+
+    pass
index 736a4dc4cffadd4d4e4811cad64cc5ef577ce332..cb860c74b30e7c781f9ff5d19840086a0e30d285 100644 (file)
@@ -17,8 +17,8 @@ class PageCustomPersonListForm(forms.ModelForm):
     )
 
     class Meta:
-        model = PageCustomPersonListBlockInline #CustomPage
-        fields = ('person_list_block',) #person_list_block
+        model = PageCustomPersonListBlockInline
+        fields = ('person_list_block',)
 
 
 class PersonListBlockInlineForm(forms.ModelForm):
index cd1c426b857467b43ab4c2b552eac2e073b3db09..4b7f16e42af016d4a1c1789178b80d321f546080 100644 (file)
   {% endwith %}
 {% 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 %}
+        {% with "network/inc/person/list_"|add:person_list_block.style|add:"_style.html" as template %}
+          {% include template %}
+        {% endwith %}
+      {% endwith %}
+    {% endfor %}
+{% endblock %}
+
+
 {% block page_related_content %}
 
     {% if article.related_articles.all %}