From: Emilie Date: Fri, 23 Sep 2016 15:52:10 +0000 (+0200) Subject: Article: add Person List Block X-Git-Url: https://git.parisson.com/?a=commitdiff_plain;h=5fc83c9af7acb08a2274942f7ef7cf06925a0374;p=mezzo.git Article: add Person List Block --- diff --git a/app/organization/magazine/admin.py b/app/organization/magazine/admin.py index 73912255..2499e922 100644 --- a/app/organization/magazine/admin.py +++ b/app/organization/magazine/admin.py @@ -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 diff --git a/app/organization/magazine/forms.py b/app/organization/magazine/forms.py index 0560c124..1a316d2b 100644 --- a/app/organization/magazine/forms.py +++ b/app/organization/magazine/forms.py @@ -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 index 00000000..77325331 --- /dev/null +++ b/app/organization/magazine/migrations/0003_articlepersonlistblockinline.py @@ -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', + }, + ), + ] diff --git a/app/organization/magazine/models.py b/app/organization/magazine/models.py index d3de1d8e..12cf3762 100644 --- a/app/organization/magazine/models.py +++ b/app/organization/magazine/models.py @@ -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 diff --git a/app/organization/magazine/translation.py b/app/organization/magazine/translation.py index 3c53e1d1..c030a31d 100644 --- a/app/organization/magazine/translation.py +++ b/app/organization/magazine/translation.py @@ -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 diff --git a/app/organization/network/forms.py b/app/organization/network/forms.py index 736a4dc4..cb860c74 100644 --- a/app/organization/network/forms.py +++ b/app/organization/network/forms.py @@ -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): diff --git a/app/templates/magazine/article/article_detail.html b/app/templates/magazine/article/article_detail.html index cd1c426b..4b7f16e4 100644 --- a/app/templates/magazine/article/article_detail.html +++ b/app/templates/magazine/article/article_detail.html @@ -76,6 +76,17 @@ {% 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 %}