from mezzanine.core.admin import *
from mezzanine.pages.admin import PageAdmin
from orderable.admin import OrderableAdmin, OrderableTabularInline
-from organization.magazine.models import Article, Brief ,Topic
+from organization.magazine.models import Article, Brief, Topic, ArticleImage
+
+
+class ArticleImageInline(TabularDynamicInlineAdmin):
+
+ model = ArticleImage
class ArticleAdmin(admin.ModelAdmin):
fieldsets = deepcopy(ArticleAdmin.fieldsets)
exclude = ('related_posts',)
filter_horizontal = ['categories', 'related_articles', ]
+ inlines = [ArticleImageInline,]
class BriefAdmin(OrderableTabularInline):
--- /dev/null
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.7 on 2016-08-12 09:07
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+import mezzanine.core.fields
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('organization-magazine', '0010_auto_20160808_0118'),
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='ArticleImage',
+ fields=[
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('_order', mezzanine.core.fields.OrderField(null=True, verbose_name='Order')),
+ ('description', models.TextField(blank=True, verbose_name='description')),
+ ('description_fr', models.TextField(blank=True, null=True, verbose_name='description')),
+ ('description_en', models.TextField(blank=True, null=True, verbose_name='description')),
+ ('file', mezzanine.core.fields.FileField(max_length=1024, verbose_name='Image')),
+ ('credits', models.CharField(blank=True, max_length=256, null=True, verbose_name='credits')),
+ ('article_fk', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='organization-magazine.Article', verbose_name='article')),
+ ],
+ options={
+ 'verbose_name_plural': 'images',
+ 'verbose_name': 'image',
+ 'ordering': ('_order',),
+ },
+ ),
+ ]
from mezzanine.pages.models import Page
from mezzanine.blog.models import BlogPost
from orderable.models import Orderable
-from organization.core.models import Named, Description
+from organization.core.models import Named, Description, Image
from organization.media.models import Photo
+class ArticleImage(Image):
+
+ article_fk = models.ForeignKey("Article", verbose_name=_('article'))
+
+ class Meta:
+ verbose_name = _("image")
+ verbose_name_plural = _("images")
+ order_with_respect_to = "article"
+
class Article(BlogPost, Photo):
sub_title = models.CharField(_('sub title'), blank=True, max_length=1000)
from modeltranslation.translator import TranslationOptions
from mezzanine.core.translation import (TranslatedSlugged,
TranslatedDisplayable,
- TranslatedRichText)
-from organization.magazine.models import Article, Topic, Brief
+ TranslatedRichText)
+from organization.magazine.models import Article, Topic, Brief, ArticleImage
@register(Article)
class ArticleTranslationOptions(TranslationOptions):
class TopicTranslationOptions(TranslationOptions):
fields = ()
+
+@register(ArticleImage)
+class ArticleImageTranslationOptions(TranslationOptions):
+
+ fields = ('description',)
--- /dev/null
+{% for image in slider_images %}
+{{ image.description }}<br/>
+<img src="{{ MEDIA_URL}}{{ image.file }}" alt="" /><br/>
+{{ image.credits }}<br/>
+{% endfor %}
{% block page_content %}
-
{% editable article.content %}
{{ article.content|richtext_filters|safe }}
{% endeditable %}
- {% block page_sub_content %}
- {% if article.related_articles.all %}
- <h2 class="dashed dashed--center">{% trans "Also discover" %}</h2>
- {% for article in article.related_articles.all %}
- {% include 'magazine/article/includes/article_card.html' %}
- {% endfor %}
- {% endif %}
- {% endblock %}
+{% endblock %}
+{% block page_slider %}
+ {% if article.articleimage_set.all %}
+ {% with article.articleimage_set.all as slider_images %}
+ {% include 'core/inc/slider.html' %}
+ {% endwith %}
+ {% endif %}
+{% endblock %}
+
+{% block page_sub_content %}
+ {% if article.related_articles.all %}
+ <h2 class="dashed dashed--center">{% trans "Also discover" %}</h2>
+ {% for article in article.related_articles.all %}
+ {% include 'magazine/article/includes/article_card.html' %}
+ {% endfor %}
+ {% endif %}
{% endblock %}
{% block page_sidebar %}
{{ page.content }}
{% endblock %}
</div>
+ <div class="col-sm-9 col-lg-8 white-bg page__content" data-summary-content>
+ {% block page_slider %}
+ {% endblock %}
+ </div>
+ <div class="col-sm-9 col-lg-8 white-bg page__content" data-summary-content>
+ {% block page_sub_content %}
+ {% endblock %}
+ </div>
</div>
</div>