From 978757be843fb604c9bdb5ea8184e313b9bf89ae Mon Sep 17 00:00:00 2001 From: Guillaume Pellerin Date: Wed, 27 Jul 2016 11:28:00 +0200 Subject: [PATCH] add PageImage --- app/organization/core/admin.py | 5 +++ .../core/migrations/0006_pageimage.py | 34 +++++++++++++++++++ .../migrations/0007_auto_20160726_0042.py | 25 ++++++++++++++ app/organization/core/models.py | 27 ++++++++++++++- app/organization/core/translation.py | 8 ++++- app/organization/team/admin.py | 9 ++--- app/organization/team/models.py | 1 + 7 files changed, 101 insertions(+), 8 deletions(-) create mode 100644 app/organization/core/migrations/0006_pageimage.py create mode 100644 app/organization/core/migrations/0007_auto_20160726_0042.py diff --git a/app/organization/core/admin.py b/app/organization/core/admin.py index 006c1654..59b3ba7d 100644 --- a/app/organization/core/admin.py +++ b/app/organization/core/admin.py @@ -10,4 +10,9 @@ class PageBlockInline(StackedDynamicInlineAdmin): model = PageBlock +class PageImageInline(TabularDynamicInlineAdmin): + + model = PageImage + + admin.site.register(BasicPage, PageAdmin) diff --git a/app/organization/core/migrations/0006_pageimage.py b/app/organization/core/migrations/0006_pageimage.py new file mode 100644 index 00000000..4e89a50d --- /dev/null +++ b/app/organization/core/migrations/0006_pageimage.py @@ -0,0 +1,34 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.7 on 2016-07-25 22:38 +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 = [ + ('pages', '0002_auto_20160725_0143'), + ('organization-core', '0005_auto_20160725_0201'), + ] + + operations = [ + migrations.CreateModel( + name='PageImage', + 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')), + ('file', mezzanine.core.fields.FileField(max_length=1024, verbose_name='Image')), + ('description', models.TextField(blank=True, verbose_name='photo description')), + ('credits', models.CharField(blank=True, max_length=256, null=True, verbose_name='photo credits')), + ('page', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='pages.Page')), + ], + options={ + 'ordering': ('_order',), + 'verbose_name_plural': 'Images', + 'verbose_name': 'Image', + }, + ), + ] diff --git a/app/organization/core/migrations/0007_auto_20160726_0042.py b/app/organization/core/migrations/0007_auto_20160726_0042.py new file mode 100644 index 00000000..f89f17e6 --- /dev/null +++ b/app/organization/core/migrations/0007_auto_20160726_0042.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.7 on 2016-07-25 22:42 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('organization-core', '0006_pageimage'), + ] + + operations = [ + migrations.AddField( + model_name='pageimage', + name='description_en', + field=models.TextField(blank=True, null=True, verbose_name='photo description'), + ), + migrations.AddField( + model_name='pageimage', + name='description_fr', + field=models.TextField(blank=True, null=True, verbose_name='photo description'), + ), + ] diff --git a/app/organization/core/models.py b/app/organization/core/models.py index 7a84a078..9ce0d064 100644 --- a/app/organization/core/models.py +++ b/app/organization/core/models.py @@ -5,7 +5,7 @@ from django.core.urlresolvers import reverse, reverse_lazy from mezzanine.pages.models import Page, RichText from mezzanine.core.fields import RichTextField, OrderField, FileField -from mezzanine.core.models import Displayable, Slugged +from mezzanine.core.models import Displayable, Slugged, Orderable COLOR_CHOICES = (('black', _('black')), ('yellow', _('yellow')), ('red', _('red'))) @@ -79,3 +79,28 @@ class PageBlock(Titled, RichText): class Meta: verbose_name = 'page block' + + +class PageImage(Orderable): + """ + An image for a page + """ + + file = FileField(_("Image"), max_length=1024, format="Image", upload_to="images/pages") + description = models.TextField(_('photo description'), blank=True) + credits = models.CharField(_('photo credits'), max_length=256, blank=True, null=True) + page = models.ForeignKey(Page) + + + class Meta: + verbose_name = _("Image") + verbose_name_plural = _("Images") + order_with_respect_to = "page" + + def __str__(self): + value = self.description + if not value: + value = self.file.name + if not value: + value = "" + return value diff --git a/app/organization/core/translation.py b/app/organization/core/translation.py index 432b32c8..31d20b13 100644 --- a/app/organization/core/translation.py +++ b/app/organization/core/translation.py @@ -1,7 +1,7 @@ from modeltranslation.translator import translator, register, TranslationOptions from mezzanine.pages.models import Page, RichText from mezzanine.pages.translation import TranslatedRichText -from organization.core.models import BasicPage, PageBlock +from organization.core.models import BasicPage, PageBlock, PageImage # @register(SubTitle) # class SubTitleTranslationOptions(TranslationOptions): @@ -18,3 +18,9 @@ class BasicPageTranslationOptions(TranslationOptions): class PageBlockTranslationOptions(TranslationOptions): fields = ('title', 'content') + + +@register(PageImage) +class PageImageTranslationOptions(TranslationOptions): + + fields = ('description',) diff --git a/app/organization/team/admin.py b/app/organization/team/admin.py index f343182d..81ee1500 100644 --- a/app/organization/team/admin.py +++ b/app/organization/team/admin.py @@ -4,7 +4,7 @@ from copy import deepcopy from mezzanine.core.admin import * from mezzanine.pages.admin import PageAdmin from organization.team.models import * -from organization.core.admin import PageBlockInline +from organization.core.admin import PageBlockInline, PageImageInline class OrganizationAdmin(BaseTranslationModelAdmin): @@ -17,17 +17,14 @@ class ActivityAdmin(BaseTranslationModelAdmin): model = Activity -class ActivityInline(StackedDynamicInlineAdmin): +class ActivityInline(TabularDynamicInlineAdmin): model = Activity class TeamAdmin(PageAdmin): - inlines = [PageBlockInline,] - - def in_menu(self): - return True + inlines = [PageBlockInline, PageImageInline] class PersonAdminBase(admin.ModelAdmin): diff --git a/app/organization/team/models.py b/app/organization/team/models.py index 83cf9dd9..60905fc6 100644 --- a/app/organization/team/models.py +++ b/app/organization/team/models.py @@ -19,6 +19,7 @@ from mezzanine.pages.models import Page from mezzanine.core.models import RichText, Displayable, Slugged from mezzanine.core.fields import RichTextField, OrderField, FileField from mezzanine.utils.models import AdminThumbMixin, upload_to +from mezzanine.galleries.models import BaseGallery from organization.media.models import Photo from organization.core.models import Named, Titled, Description, SubTitle -- 2.39.5