From: Guillaume Pellerin Date: Tue, 23 Aug 2016 17:51:19 +0000 (+0200) Subject: Complete refactoring with more generic blocks, images, links, etc thanks to meta... X-Git-Url: https://git.parisson.com/?a=commitdiff_plain;h=38e181c6c08c492351851c0fd7bf765e5b2c60c8;p=mezzo.git Complete refactoring with more generic blocks, images, links, etc thanks to meta classes --- diff --git a/app/organization/core/admin.py b/app/organization/core/admin.py index 47e8e3bc..688d1cf5 100644 --- a/app/organization/core/admin.py +++ b/app/organization/core/admin.py @@ -4,22 +4,4 @@ from mezzanine.core.admin import * from mezzanine.pages.admin import PageAdmin from organization.core.models import * - -class PageBlockInline(StackedDynamicInlineAdmin): - - model = PageBlock - - -class PageImageInline(TabularDynamicInlineAdmin): - - model = PageImage - - -class BasicPageAdmin(PageAdmin): - - inlines = [PageBlockInline, PageImageInline] - - - -admin.site.register(BasicPage, BasicPageAdmin) admin.site.register(LinkType) diff --git a/app/organization/core/migrations/0001_initial.py b/app/organization/core/migrations/0001_initial.py index 451e32ac..c8906102 100644 --- a/app/organization/core/migrations/0001_initial.py +++ b/app/organization/core/migrations/0001_initial.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.9.7 on 2016-07-14 16:53 +# Generated by Django 1.9.7 on 2016-08-23 17:45 from __future__ import unicode_literals from django.db import migrations, models @@ -12,23 +12,185 @@ class Migration(migrations.Migration): initial = True dependencies = [ - ('pages', '0001_initial'), + ('sites', '0002_alter_domain_unique'), ] operations = [ migrations.CreateModel( - name='BasicPage', + name='Category', fields=[ - ('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='pages.Page')), + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=512, verbose_name='name')), + ('description', models.TextField(blank=True, verbose_name='description')), + ], + options={ + 'verbose_name': 'category', + }, + ), + migrations.CreateModel( + name='CustomDisplayable', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('keywords_string', models.CharField(blank=True, editable=False, max_length=500)), + ('title', models.CharField(max_length=500, verbose_name='Title')), + ('slug', models.CharField(blank=True, help_text='Leave blank to have the URL auto-generated from the title.', max_length=2000, null=True, verbose_name='URL')), + ('_meta_title', models.CharField(blank=True, help_text='Optional title to be used in the HTML title tag. If left blank, the main title field will be used.', max_length=500, null=True, verbose_name='Title')), + ('description', models.TextField(blank=True, verbose_name='Description')), + ('gen_description', models.BooleanField(default=True, help_text='If checked, the description will be automatically generated from content. Uncheck if you want to manually set a custom description.', verbose_name='Generate description')), + ('created', models.DateTimeField(editable=False, null=True)), + ('updated', models.DateTimeField(editable=False, null=True)), + ('status', models.IntegerField(choices=[(1, 'Draft'), (2, 'Published')], default=2, help_text='With Draft chosen, will only be shown for admin users on the site.', verbose_name='Status')), + ('publish_date', models.DateTimeField(blank=True, db_index=True, help_text="With Published chosen, won't be shown until this time", null=True, verbose_name='Published from')), + ('expiry_date', models.DateTimeField(blank=True, help_text="With Published chosen, won't be shown after this time", null=True, verbose_name='Expires on')), + ('short_url', models.URLField(blank=True, null=True)), + ('in_sitemap', models.BooleanField(default=True, verbose_name='Show in sitemap')), + ('site', models.ForeignKey(editable=False, on_delete=django.db.models.deletion.CASCADE, to='sites.Site')), + ], + options={ + 'verbose_name': 'custom displayable', + }, + ), + migrations.CreateModel( + name='CustomModel', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ], + options={ + 'verbose_name': 'custom model', + }, + ), + migrations.CreateModel( + name='DisplayableBlock', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('content', mezzanine.core.fields.RichTextField(verbose_name='Content')), - ('sub_title', models.TextField(blank=True, max_length=1024, verbose_name='sub title')), - ('sub_title_fr', models.TextField(blank=True, max_length=1024, null=True, verbose_name='sub title')), - ('sub_title_en', models.TextField(blank=True, max_length=1024, null=True, verbose_name='sub title')), + ('content_fr', mezzanine.core.fields.RichTextField(null=True, verbose_name='Content')), + ('content_en', mezzanine.core.fields.RichTextField(null=True, verbose_name='Content')), + ('_order', mezzanine.core.fields.OrderField(null=True, verbose_name='Order')), + ('title', models.CharField(max_length=1024, verbose_name='title')), + ('title_fr', models.CharField(max_length=1024, null=True, verbose_name='title')), + ('title_en', models.CharField(max_length=1024, null=True, verbose_name='title')), + ('description', models.TextField(blank=True, verbose_name='description')), + ('with_separator', models.BooleanField(default=False)), + ('background_color', models.CharField(blank=True, choices=[('black', 'black'), ('yellow', 'yellow'), ('red', 'red')], max_length=32, verbose_name='background color')), + ('displayable', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='blocks', to='organization-core.CustomDisplayable', verbose_name='displayable')), ], options={ + 'verbose_name': 'block', 'ordering': ('_order',), - 'verbose_name': 'basic page', + 'verbose_name_plural': 'blocks', + }, + ), + migrations.CreateModel( + name='DisplayableImage', + 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')), + ('title', models.CharField(max_length=1024, verbose_name='title')), + ('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')), + ('type', models.CharField(blank=True, choices=[('logo', 'logo'), ('slider', 'slider'), ('card', 'card'), ('content', 'content')], max_length=64, verbose_name='type')), + ('displayable', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='images', to='organization-core.CustomDisplayable', verbose_name='displayable')), + ], + options={ + 'verbose_name': 'image', + 'ordering': ('_order',), + 'verbose_name_plural': 'images', + }, + ), + migrations.CreateModel( + name='DisplayableLink', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('url', models.URLField(blank=True, max_length=512, verbose_name='URL')), + ('displayable', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='links', to='organization-core.CustomDisplayable', verbose_name='displayable')), + ], + options={ + 'verbose_name': 'link', + 'verbose_name_plural': 'links', }, - bases=('pages.page', models.Model), + ), + migrations.CreateModel( + name='LinkType', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=256, verbose_name='name')), + ('slug', models.SlugField(blank=True, help_text='Use this field to define a simple identifier that can be used to style the different link types (i.e. assign social media icons to them)', max_length=256, verbose_name='slug')), + ('ordering', models.PositiveIntegerField(blank=True, null=True, verbose_name='ordering')), + ], + options={ + 'ordering': ['ordering'], + }, + ), + migrations.CreateModel( + name='ModelBlock', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('content', mezzanine.core.fields.RichTextField(verbose_name='Content')), + ('content_fr', mezzanine.core.fields.RichTextField(null=True, verbose_name='Content')), + ('content_en', mezzanine.core.fields.RichTextField(null=True, verbose_name='Content')), + ('_order', mezzanine.core.fields.OrderField(null=True, verbose_name='Order')), + ('title', models.CharField(max_length=1024, verbose_name='title')), + ('title_fr', models.CharField(max_length=1024, null=True, verbose_name='title')), + ('title_en', models.CharField(max_length=1024, null=True, verbose_name='title')), + ('description', models.TextField(blank=True, verbose_name='description')), + ('with_separator', models.BooleanField(default=False)), + ('background_color', models.CharField(blank=True, choices=[('black', 'black'), ('yellow', 'yellow'), ('red', 'red')], max_length=32, verbose_name='background color')), + ('model', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='blocks', to='organization-core.CustomModel', verbose_name='model')), + ], + options={ + 'verbose_name': 'block', + 'ordering': ('_order',), + 'verbose_name_plural': 'blocks', + }, + ), + migrations.CreateModel( + name='ModelImage', + 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')), + ('title', models.CharField(max_length=1024, verbose_name='title')), + ('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')), + ('type', models.CharField(blank=True, choices=[('logo', 'logo'), ('slider', 'slider'), ('card', 'card'), ('content', 'content')], max_length=64, verbose_name='type')), + ('model', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='images', to='organization-core.CustomModel', verbose_name='model')), + ], + options={ + 'verbose_name': 'image', + 'ordering': ('_order',), + 'verbose_name_plural': 'images', + }, + ), + migrations.CreateModel( + name='ModelLink', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('url', models.URLField(blank=True, max_length=512, verbose_name='URL')), + ('link_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='organization-core.LinkType', verbose_name='link type')), + ('model', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='links', to='organization-core.CustomModel', verbose_name='model')), + ], + options={ + 'verbose_name': 'link', + 'verbose_name_plural': 'links', + }, + ), + migrations.AddField( + model_name='displayablelink', + name='link_type', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='organization-core.LinkType', verbose_name='link type'), + ), + migrations.AlterOrderWithRespectTo( + name='modellink', + order_with_respect_to='model', + ), + migrations.AlterOrderWithRespectTo( + name='displayablelink', + order_with_respect_to='displayable', ), ] diff --git a/app/organization/core/migrations/0002_auto_20160714_1952.py b/app/organization/core/migrations/0002_auto_20160714_1952.py deleted file mode 100644 index 19c08d5f..00000000 --- a/app/organization/core/migrations/0002_auto_20160714_1952.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.7 on 2016-07-14 17:52 -from __future__ import unicode_literals - -from django.db import migrations -import mezzanine.core.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('organization-core', '0001_initial'), - ] - - operations = [ - migrations.AddField( - model_name='basicpage', - name='content_en', - field=mezzanine.core.fields.RichTextField(null=True, verbose_name='Content'), - ), - migrations.AddField( - model_name='basicpage', - name='content_fr', - field=mezzanine.core.fields.RichTextField(null=True, verbose_name='Content'), - ), - ] diff --git a/app/organization/core/migrations/0003_category_pageblock.py b/app/organization/core/migrations/0003_category_pageblock.py deleted file mode 100644 index 9476c9d2..00000000 --- a/app/organization/core/migrations/0003_category_pageblock.py +++ /dev/null @@ -1,38 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.7 on 2016-07-24 23:17 -from __future__ import unicode_literals - -from django.db import migrations, models -import mezzanine.core.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('organization-core', '0002_auto_20160714_1952'), - ] - - operations = [ - migrations.CreateModel( - name='Category', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(max_length=512, verbose_name='name')), - ], - options={ - 'verbose_name': 'category', - }, - ), - migrations.CreateModel( - name='PageBlock', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('content', mezzanine.core.fields.RichTextField(verbose_name='Content')), - ('title', models.CharField(max_length=1024, verbose_name='name')), - ('background_color', models.CharField(blank=True, choices=[('black', 'black'), ('yellow', 'yellow'), ('red', 'red')], max_length=32, verbose_name='background color')), - ], - options={ - 'verbose_name': 'page block', - }, - ), - ] diff --git a/app/organization/core/migrations/0004_auto_20160725_0159.py b/app/organization/core/migrations/0004_auto_20160725_0159.py deleted file mode 100644 index 580e7f2f..00000000 --- a/app/organization/core/migrations/0004_auto_20160725_0159.py +++ /dev/null @@ -1,43 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.7 on 2016-07-24 23:59 -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', '0003_category_pageblock'), - ] - - operations = [ - migrations.AddField( - model_name='pageblock', - name='content_en', - field=mezzanine.core.fields.RichTextField(null=True, verbose_name='Content'), - ), - migrations.AddField( - model_name='pageblock', - name='content_fr', - field=mezzanine.core.fields.RichTextField(null=True, verbose_name='Content'), - ), - migrations.AddField( - model_name='pageblock', - name='page', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='pages.Page', verbose_name='page'), - ), - migrations.AddField( - model_name='pageblock', - name='title_en', - field=models.CharField(max_length=1024, null=True, verbose_name='name'), - ), - migrations.AddField( - model_name='pageblock', - name='title_fr', - field=models.CharField(max_length=1024, null=True, verbose_name='name'), - ), - ] diff --git a/app/organization/core/migrations/0005_auto_20160725_0201.py b/app/organization/core/migrations/0005_auto_20160725_0201.py deleted file mode 100644 index 3e00ae9c..00000000 --- a/app/organization/core/migrations/0005_auto_20160725_0201.py +++ /dev/null @@ -1,30 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.7 on 2016-07-25 00:01 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('organization-core', '0004_auto_20160725_0159'), - ] - - operations = [ - migrations.AlterField( - model_name='pageblock', - name='title', - field=models.CharField(max_length=1024, verbose_name='title'), - ), - migrations.AlterField( - model_name='pageblock', - name='title_en', - field=models.CharField(max_length=1024, null=True, verbose_name='title'), - ), - migrations.AlterField( - model_name='pageblock', - name='title_fr', - field=models.CharField(max_length=1024, null=True, verbose_name='title'), - ), - ] diff --git a/app/organization/core/migrations/0006_pageimage.py b/app/organization/core/migrations/0006_pageimage.py deleted file mode 100644 index 4e89a50d..00000000 --- a/app/organization/core/migrations/0006_pageimage.py +++ /dev/null @@ -1,34 +0,0 @@ -# -*- 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 deleted file mode 100644 index f89f17e6..00000000 --- a/app/organization/core/migrations/0007_auto_20160726_0042.py +++ /dev/null @@ -1,25 +0,0 @@ -# -*- 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/migrations/0008_auto_20160727_1553.py b/app/organization/core/migrations/0008_auto_20160727_1553.py deleted file mode 100644 index e246faf2..00000000 --- a/app/organization/core/migrations/0008_auto_20160727_1553.py +++ /dev/null @@ -1,56 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.7 on 2016-07-27 13:53 -from __future__ import unicode_literals - -from django.db import migrations, models -import mezzanine.core.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('organization-core', '0007_auto_20160726_0042'), - ] - - operations = [ - migrations.AddField( - model_name='basicpage', - name='photo', - field=mezzanine.core.fields.FileField(blank=True, max_length=1024, verbose_name='photo'), - ), - migrations.AddField( - model_name='basicpage', - name='photo_alignment', - field=models.CharField(blank=True, choices=[('left', 'left'), ('center', 'center'), ('right', 'right')], default='left', max_length=32, verbose_name='photo alignment'), - ), - migrations.AddField( - model_name='basicpage', - name='photo_card', - field=mezzanine.core.fields.FileField(blank=True, max_length=1024, verbose_name='card photo'), - ), - migrations.AddField( - model_name='basicpage', - name='photo_card_credits', - field=models.CharField(blank=True, max_length=255, null=True, verbose_name='photo card credits'), - ), - migrations.AddField( - model_name='basicpage', - name='photo_credits', - field=models.CharField(blank=True, max_length=255, null=True, verbose_name='photo credits'), - ), - migrations.AddField( - model_name='basicpage', - name='photo_description', - field=models.TextField(blank=True, verbose_name='photo description'), - ), - migrations.AddField( - model_name='basicpage', - name='photo_slider', - field=mezzanine.core.fields.FileField(blank=True, max_length=1024, verbose_name='slider photo'), - ), - migrations.AddField( - model_name='basicpage', - name='photo_slider_credits', - field=models.CharField(blank=True, max_length=255, null=True, verbose_name='photo slider credits'), - ), - ] diff --git a/app/organization/core/migrations/0009_pageblock_with_separator.py b/app/organization/core/migrations/0009_pageblock_with_separator.py deleted file mode 100644 index 49ac7b1c..00000000 --- a/app/organization/core/migrations/0009_pageblock_with_separator.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.7 on 2016-07-27 14:38 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('organization-core', '0008_auto_20160727_1553'), - ] - - operations = [ - migrations.AddField( - model_name='pageblock', - name='with_separator', - field=models.BooleanField(default=False), - ), - ] diff --git a/app/organization/core/migrations/0010_auto_20160808_0118.py b/app/organization/core/migrations/0010_auto_20160808_0118.py deleted file mode 100644 index 6799e47d..00000000 --- a/app/organization/core/migrations/0010_auto_20160808_0118.py +++ /dev/null @@ -1,31 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.7 on 2016-08-07 23:18 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('organization-core', '0009_pageblock_with_separator'), - ] - - operations = [ - migrations.CreateModel( - name='LinkType', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(max_length=256, verbose_name='name')), - ('slug', models.SlugField(blank=True, help_text='Use this field to define a simple identifier that can be used to style the different link types (i.e. assign social media icons to them)', max_length=256, verbose_name='slug')), - ('ordering', models.PositiveIntegerField(blank=True, null=True, verbose_name='ordering')), - ], - options={ - 'ordering': ['ordering'], - }, - ), - migrations.AlterModelOptions( - name='pageimage', - options={'ordering': ('_order',), 'verbose_name': 'image', 'verbose_name_plural': 'images'}, - ), - ] diff --git a/app/organization/core/migrations/0011_auto_20160809_1413.py b/app/organization/core/migrations/0011_auto_20160809_1413.py deleted file mode 100644 index 3b0f766d..00000000 --- a/app/organization/core/migrations/0011_auto_20160809_1413.py +++ /dev/null @@ -1,41 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.7 on 2016-08-09 12:13 -from __future__ import unicode_literals - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('organization-core', '0010_auto_20160808_0118'), - ] - - operations = [ - migrations.AlterField( - model_name='pageimage', - name='credits', - field=models.CharField(blank=True, max_length=256, null=True, verbose_name='credits'), - ), - migrations.AlterField( - model_name='pageimage', - name='description', - field=models.TextField(blank=True, verbose_name='description'), - ), - migrations.AlterField( - model_name='pageimage', - name='description_en', - field=models.TextField(blank=True, null=True, verbose_name='description'), - ), - migrations.AlterField( - model_name='pageimage', - name='description_fr', - field=models.TextField(blank=True, null=True, verbose_name='description'), - ), - migrations.AlterField( - model_name='pageimage', - name='page', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='pages.Page', verbose_name='page'), - ), - ] diff --git a/app/organization/core/migrations/0012_auto_20160818_1656.py b/app/organization/core/migrations/0012_auto_20160818_1656.py deleted file mode 100644 index 4b1c7be4..00000000 --- a/app/organization/core/migrations/0012_auto_20160818_1656.py +++ /dev/null @@ -1,25 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.7 on 2016-08-18 14:56 -from __future__ import unicode_literals - -from django.db import migrations -import mezzanine.core.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('organization-core', '0011_auto_20160809_1413'), - ] - - operations = [ - migrations.AlterModelOptions( - name='pageblock', - options={'ordering': ('_order',), 'verbose_name': 'page block'}, - ), - migrations.AddField( - model_name='pageblock', - name='_order', - field=mezzanine.core.fields.OrderField(null=True, verbose_name='Order'), - ), - ] diff --git a/app/organization/core/migrations/0013_auto_20160823_1359.py b/app/organization/core/migrations/0013_auto_20160823_1359.py deleted file mode 100644 index e667ec83..00000000 --- a/app/organization/core/migrations/0013_auto_20160823_1359.py +++ /dev/null @@ -1,25 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.7 on 2016-08-23 11:59 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('organization-core', '0012_auto_20160818_1656'), - ] - - operations = [ - migrations.AddField( - model_name='category', - name='description', - field=models.TextField(blank=True, verbose_name='description'), - ), - migrations.AddField( - model_name='pageblock', - name='description', - field=models.TextField(blank=True, verbose_name='description'), - ), - ] diff --git a/app/organization/core/models.py b/app/organization/core/models.py index 914169a6..e66c8ce9 100644 --- a/app/organization/core/models.py +++ b/app/organization/core/models.py @@ -12,6 +12,7 @@ from mezzanine.core.models import Displayable, Slugged, Orderable COLOR_CHOICES = (('black', _('black')), ('yellow', _('yellow')), ('red', _('red'))) ALIGNMENT_CHOICES = (('left', _('left')), ('center', _('center')), ('right', _('right'))) +IMAGE_TYPE_CHOICES = (('logo', _('logo')), ('slider', _('slider')), ('card', _('card')), ('content', _('content'))) class Description(models.Model): @@ -53,7 +54,7 @@ class Titled(models.Model): return self.title -class SubTitle(models.Model): +class SubTitled(models.Model): sub_title = models.TextField(_('sub title'), blank=True, max_length=1024) @@ -71,46 +72,32 @@ class Category(Named): return self.name -class Photo(models.Model): - """Photo bundle with credits""" - - photo = FileField(_('photo'), upload_to='images/photos', max_length=1024, blank=True, format="Image") - photo_credits = models.CharField(_('photo credits'), max_length=255, blank=True, null=True) - photo_alignment = models.CharField(_('photo alignment'), choices=ALIGNMENT_CHOICES, max_length=32, default="left", blank=True) - photo_description = models.TextField(_('photo description'), blank=True) - - photo_card = FileField(_('card photo'), upload_to='images/photos/card', max_length=1024, blank=True, format="Image") - photo_card_credits = models.CharField(_('photo card credits'), max_length=255, blank=True, null=True) +class Block(RichText, Titled, Orderable): - photo_slider = FileField(_('slider photo'), upload_to='images/photos/slider', max_length=1024, blank=True, format="Image") - photo_slider_credits = models.CharField(_('photo slider credits'), max_length=255, blank=True, null=True) - abstract = True + with_separator = models.BooleanField(default=False) + background_color = models.CharField(_('background color'), max_length=32, choices=COLOR_CHOICES, blank=True) class Meta: abstract = True - @property - def card(self): - if self.photo_card: - return self.photo_card - else: - return self.photo - - -class BasicPage(Page, SubTitle, Photo, RichText): - - class Meta: - verbose_name = 'basic page' - -class Block(RichText, Titled, Orderable): +class Image(Titled, Orderable): - with_separator = models.BooleanField(default=False) - background_color = models.CharField(_('background color'), max_length=32, choices=COLOR_CHOICES, blank=True) + file = FileField(_("Image"), max_length=1024, format="Image", upload_to="images") + credits = models.CharField(_('credits'), max_length=256, blank=True, null=True) + type = models.CharField(_('type'), max_length=64, choices=IMAGE_TYPE_CHOICES, blank=True) class Meta: abstract = True + def __str__(self): + value = self.description + if not value: + value = self.file.name + if not value: + value = "" + return value + class DynamicContent(models.Model): @@ -136,40 +123,13 @@ class DynamicContent(models.Model): abstract = True -class Image(Description, Orderable): +class URL(models.Model): - file = FileField(_("Image"), max_length=1024, format="Image", upload_to="images") - credits = models.CharField(_('credits'), max_length=256, blank=True, null=True) + url = models.URLField(_('URL'), max_length=512, blank=True) class Meta: abstract = True - def __str__(self): - value = self.description - if not value: - value = self.file.name - if not value: - value = "" - return value - - -class PageBlock(Block): - - page = models.ForeignKey(Page, verbose_name=_('page'), blank=True, null=True, on_delete=models.SET_NULL) - - class Meta: - verbose_name = 'page block' - - -class PageImage(Image): - - page = models.ForeignKey(Page, verbose_name=_('page')) - - class Meta: - verbose_name = _("image") - verbose_name_plural = _("images") - order_with_respect_to = "page" - class LinkType(models.Model): """ @@ -196,11 +156,10 @@ class LinkType(models.Model): return self.name -class Link(models.Model): +class Link(URL): """A person can have many links.""" link_type = models.ForeignKey(LinkType, verbose_name=_('link type')) - url = models.URLField(verbose_name=_('URL')) class Meta: abstract = True @@ -211,6 +170,7 @@ class Link(models.Model): return self.url + class Period(models.Model): date_begin = models.DateField(_('begin date'), null=True, blank=True) @@ -218,3 +178,77 @@ class Period(models.Model): class Meta: abstract = True + + + +class CustomDisplayable(Displayable): + + class Meta: + verbose_name = _('custom displayable') + + +class DisplayableBlock(Block): + + displayable = models.ForeignKey(CustomDisplayable, verbose_name=_('displayable'), related_name='blocks', blank=True, null=True, on_delete=models.SET_NULL) + + class Meta: + verbose_name = _('block') + verbose_name_plural = _("blocks") + order_with_respect_to = "displayable" + + +class DisplayableImage(Image): + + displayable = models.ForeignKey(CustomDisplayable, verbose_name=_('displayable'), related_name='images', blank=True, null=True, on_delete=models.SET_NULL) + + class Meta: + verbose_name = _('image') + verbose_name_plural = _("images") + order_with_respect_to = "displayable" + + +class DisplayableLink(Link): + + displayable = models.ForeignKey(CustomDisplayable, verbose_name=_('displayable'), related_name='links', blank=True, null=True, on_delete=models.SET_NULL) + + class Meta: + verbose_name = _('link') + verbose_name_plural = _("links") + order_with_respect_to = "displayable" + + + +class CustomModel(models.Model): + + class Meta: + verbose_name = _('custom model') + + +class ModelBlock(Block): + + model = models.ForeignKey(CustomModel, verbose_name=_('model'), related_name='blocks', blank=True, null=True, on_delete=models.SET_NULL) + + class Meta: + verbose_name = _('block') + verbose_name_plural = _("blocks") + order_with_respect_to = "model" + + +class ModelImage(Image): + + model = models.ForeignKey(CustomModel, verbose_name=_('model'), related_name='images', blank=True, null=True, on_delete=models.SET_NULL) + + class Meta: + verbose_name = _('image') + verbose_name_plural = _("images") + order_with_respect_to = "model" + + +class ModelLink(Link): + + model = models.ForeignKey(CustomModel, verbose_name=_('model'), related_name='links', blank=True, null=True, on_delete=models.SET_NULL) + + class Meta: + verbose_name = _('link') + verbose_name_plural = _("links") + order_with_respect_to = "model" diff --git a/app/organization/core/translation.py b/app/organization/core/translation.py index be8346b8..73343c0b 100644 --- a/app/organization/core/translation.py +++ b/app/organization/core/translation.py @@ -3,24 +3,50 @@ from mezzanine.pages.models import Page, RichText from mezzanine.pages.translation import TranslatedRichText from organization.core.models import * -# @register(SubTitle) -# class SubTitleTranslationOptions(TranslationOptions): -# -# fields = ('sub_title',) -@register(BasicPage) -class BasicPageTranslationOptions(TranslationOptions): +@register(CustomDisplayable) +class CustomDisplayableTranslationOptions(TranslationOptions): - fields = ('sub_title', 'content') + pass -@register(PageBlock) -class PageBlockTranslationOptions(TranslationOptions): +@register(DisplayableImage) +class DisplayableImageTranslationOptions(TranslationOptions): + + fields = ('description',) + + +@register(DisplayableLink) +class DisplayableLinkTranslationOptions(TranslationOptions): + + pass + + +@register(DisplayableBlock) +class DisplayableBlockTranslationOptions(TranslationOptions): + + fields = ('title', 'content', ) - fields = ('title', 'content') +@register(CustomModel) +class CustomModelTranslationOptions(TranslationOptions): -@register(PageImage) -class PageImageTranslationOptions(TranslationOptions): + pass + + +@register(ModelImage) +class ModelImageTranslationOptions(TranslationOptions): fields = ('description',) + + +@register(ModelLink) +class ModelLinkTranslationOptions(TranslationOptions): + + pass + + +@register(ModelBlock) +class ModelBlockTranslationOptions(TranslationOptions): + + fields = ('title', 'content', ) diff --git a/app/organization/festival/migrations/0001_initial.py b/app/organization/festival/migrations/0001_initial.py index 95909e59..765d9bf2 100644 --- a/app/organization/festival/migrations/0001_initial.py +++ b/app/organization/festival/migrations/0001_initial.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.9.7 on 2016-07-14 16:53 +# Generated by Django 1.9.7 on 2016-08-23 17:45 from __future__ import unicode_literals from django.db import migrations, models @@ -41,14 +41,6 @@ class Migration(migrations.Migration): ('content', mezzanine.core.fields.RichTextField(verbose_name='Content')), ('content_fr', mezzanine.core.fields.RichTextField(null=True, verbose_name='Content')), ('content_en', mezzanine.core.fields.RichTextField(null=True, verbose_name='Content')), - ('photo', mezzanine.core.fields.FileField(blank=True, max_length=1024, verbose_name='photo')), - ('photo_credits', models.CharField(blank=True, max_length=255, null=True, verbose_name='photo credits')), - ('photo_alignment', models.CharField(blank=True, choices=[('left', 'left'), ('center', 'center'), ('right', 'right')], default='left', max_length=32, verbose_name='photo alignment')), - ('photo_description', models.TextField(blank=True, verbose_name='photo description')), - ('photo_card', mezzanine.core.fields.FileField(blank=True, max_length=1024, verbose_name='card photo')), - ('photo_card_credits', models.CharField(blank=True, max_length=255, null=True, verbose_name='photo card credits')), - ('photo_slider', mezzanine.core.fields.FileField(blank=True, max_length=1024, verbose_name='slider photo')), - ('photo_slider_credits', models.CharField(blank=True, max_length=255, null=True, verbose_name='photo slider credits')), ('first_name', models.CharField(blank=True, max_length=255, null=True, verbose_name='first name')), ('last_name', models.CharField(blank=True, max_length=255, null=True, verbose_name='last name')), ('bio', mezzanine.core.fields.RichTextField(blank=True, verbose_name='biography')), @@ -60,6 +52,6 @@ class Migration(migrations.Migration): 'verbose_name': 'artist', 'ordering': ['last_name'], }, - bases=(mezzanine.utils.models.AdminThumbMixin, models.Model), + bases=(models.Model, mezzanine.utils.models.AdminThumbMixin), ), ] diff --git a/app/organization/festival/models.py b/app/organization/festival/models.py index 5b110a40..f2d55d59 100644 --- a/app/organization/festival/models.py +++ b/app/organization/festival/models.py @@ -15,7 +15,7 @@ import requests from pyquery import PyQuery as pq -class Artist(Displayable, RichText, AdminThumbMixin, Photo): +class Artist(Displayable, RichText, AdminThumbMixin): """Artist""" first_name = models.CharField(_('first name'), max_length=255, blank=True, null=True) diff --git a/app/organization/magazine/forms.py b/app/organization/magazine/forms.py index 0a9768ca..0560c124 100644 --- a/app/organization/magazine/forms.py +++ b/app/organization/magazine/forms.py @@ -4,7 +4,7 @@ import dal_queryset_sequence import dal_select2_queryset_sequence from organization.magazine.models import Article, Topic, Brief -from organization.core.models import BasicPage +from organization.pages.models import CustomPage from mezzanine_agenda.models import Event class BriefForm(autocomplete.FutureModelForm): @@ -13,7 +13,7 @@ class BriefForm(autocomplete.FutureModelForm): queryset=autocomplete.QuerySetSequence( Article.objects.all(), Event.objects.all(), - BasicPage.objects.all(), + CustomPage.objects.all(), ), required=False, widget=dal_select2_queryset_sequence.widgets.QuerySetSequenceSelect2('object-autocomplete'), diff --git a/app/organization/magazine/migrations/0001_initial.py b/app/organization/magazine/migrations/0001_initial.py index 76743650..ff10e15b 100644 --- a/app/organization/magazine/migrations/0001_initial.py +++ b/app/organization/magazine/migrations/0001_initial.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.9.7 on 2016-07-14 16:53 +# Generated by Django 1.9.7 on 2016-08-23 17:45 from __future__ import unicode_literals from django.db import migrations, models @@ -12,7 +12,9 @@ class Migration(migrations.Migration): initial = True dependencies = [ + ('pages', '0004_auto_20160804_1547'), ('sites', '0002_alter_domain_unique'), + ('contenttypes', '0002_remove_content_type_name'), ('blog', '0001_initial'), ] @@ -21,14 +23,35 @@ class Migration(migrations.Migration): name='Article', fields=[ ('blogpost_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='blog.BlogPost')), - ('sub_title', models.CharField(blank=True, max_length=1000, verbose_name='sub title')), - ('sub_title_fr', models.CharField(blank=True, max_length=1000, null=True, verbose_name='sub title')), - ('sub_title_en', models.CharField(blank=True, max_length=1000, null=True, verbose_name='sub title')), + ('sub_title', models.TextField(blank=True, max_length=1024, verbose_name='sub title')), + ('sub_title_fr', models.TextField(blank=True, max_length=1024, null=True, verbose_name='sub title')), + ('sub_title_en', models.TextField(blank=True, max_length=1024, null=True, verbose_name='sub title')), + ('related_articles', models.ManyToManyField(blank=True, related_name='_article_related_articles_+', to='organization-magazine.Article', verbose_name='Related articles')), ], options={ 'verbose_name': 'article', }, - bases=('blog.blogpost',), + bases=('blog.blogpost', models.Model), + ), + 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')), + ('title', models.CharField(max_length=1024, verbose_name='title')), + ('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')), + ('type', models.CharField(blank=True, choices=[('logo', 'logo'), ('slider', 'slider'), ('card', 'card'), ('content', 'content')], max_length=64, verbose_name='type')), + ('article', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='images', to='organization-magazine.Article', verbose_name='article')), + ], + options={ + 'verbose_name': 'image', + 'ordering': ('_order',), + 'verbose_name_plural': 'images', + }, ), migrations.CreateModel( name='Brief', @@ -51,9 +74,11 @@ class Migration(migrations.Migration): ('text_button', models.CharField(blank=True, max_length=150, verbose_name='text button')), ('text_button_fr', models.CharField(blank=True, max_length=150, null=True, verbose_name='text button')), ('text_button_en', models.CharField(blank=True, max_length=150, null=True, verbose_name='text button')), - ('local_content', models.URLField(max_length=1000, verbose_name='local content')), - ('local_content_fr', models.URLField(max_length=1000, null=True, verbose_name='local content')), - ('local_content_en', models.URLField(max_length=1000, null=True, verbose_name='local content')), + ('external_content', models.URLField(blank=True, max_length=1000, verbose_name='external content')), + ('external_content_fr', models.URLField(blank=True, max_length=1000, null=True, verbose_name='external content')), + ('external_content_en', models.URLField(blank=True, max_length=1000, null=True, verbose_name='external content')), + ('object_id', models.PositiveIntegerField(editable=False, null=True, verbose_name='related object')), + ('content_type', models.ForeignKey(blank=True, editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType', verbose_name='content page')), ('site', models.ForeignKey(editable=False, on_delete=django.db.models.deletion.CASCADE, to='sites.Site')), ], options={ @@ -61,14 +86,16 @@ class Migration(migrations.Migration): }, ), migrations.CreateModel( - name='Category', + name='Topic', fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(max_length=512, verbose_name='name')), - ('description', models.TextField(blank=True, verbose_name='description')), + ('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='pages.Page')), + ('content', mezzanine.core.fields.RichTextField(verbose_name='Content')), + ('articles', models.ManyToManyField(blank=True, to='organization-magazine.Article', verbose_name='articles')), ], options={ - 'verbose_name': 'category', + 'verbose_name': 'topic', + 'ordering': ('_order',), }, + bases=('pages.page', models.Model), ), ] diff --git a/app/organization/magazine/migrations/0002_delete_category.py b/app/organization/magazine/migrations/0002_delete_category.py deleted file mode 100644 index ac8fe7e0..00000000 --- a/app/organization/magazine/migrations/0002_delete_category.py +++ /dev/null @@ -1,18 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.7 on 2016-07-24 23:17 -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('organization-magazine', '0001_initial'), - ] - - operations = [ - migrations.DeleteModel( - name='Category', - ), - ] diff --git a/app/organization/magazine/migrations/0003_auto_20160728_1536.py b/app/organization/magazine/migrations/0003_auto_20160728_1536.py deleted file mode 100644 index 4523667c..00000000 --- a/app/organization/magazine/migrations/0003_auto_20160728_1536.py +++ /dev/null @@ -1,56 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.7 on 2016-07-28 13:36 -from __future__ import unicode_literals - -from django.db import migrations, models -import mezzanine.core.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('organization-magazine', '0002_delete_category'), - ] - - operations = [ - migrations.AddField( - model_name='article', - name='photo', - field=mezzanine.core.fields.FileField(blank=True, max_length=1024, verbose_name='photo'), - ), - migrations.AddField( - model_name='article', - name='photo_alignment', - field=models.CharField(blank=True, choices=[('left', 'left'), ('center', 'center'), ('right', 'right')], default='left', max_length=32, verbose_name='photo alignment'), - ), - migrations.AddField( - model_name='article', - name='photo_card', - field=mezzanine.core.fields.FileField(blank=True, max_length=1024, verbose_name='card photo'), - ), - migrations.AddField( - model_name='article', - name='photo_card_credits', - field=models.CharField(blank=True, max_length=255, null=True, verbose_name='photo card credits'), - ), - migrations.AddField( - model_name='article', - name='photo_credits', - field=models.CharField(blank=True, max_length=255, null=True, verbose_name='photo credits'), - ), - migrations.AddField( - model_name='article', - name='photo_description', - field=models.TextField(blank=True, verbose_name='photo description'), - ), - migrations.AddField( - model_name='article', - name='photo_slider', - field=mezzanine.core.fields.FileField(blank=True, max_length=1024, verbose_name='slider photo'), - ), - migrations.AddField( - model_name='article', - name='photo_slider_credits', - field=models.CharField(blank=True, max_length=255, null=True, verbose_name='photo slider credits'), - ), - ] diff --git a/app/organization/magazine/migrations/0004_article_related_article.py b/app/organization/magazine/migrations/0004_article_related_article.py deleted file mode 100644 index 7cf1a711..00000000 --- a/app/organization/magazine/migrations/0004_article_related_article.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.7 on 2016-07-28 13:49 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('organization-magazine', '0003_auto_20160728_1536'), - ] - - operations = [ - migrations.AddField( - model_name='article', - name='related_article', - field=models.ManyToManyField(blank=True, related_name='_article_related_article_+', to='organization-magazine.Article', verbose_name='Related posts'), - ), - ] diff --git a/app/organization/magazine/migrations/0005_auto_20160728_1551.py b/app/organization/magazine/migrations/0005_auto_20160728_1551.py deleted file mode 100644 index 3bd17a1d..00000000 --- a/app/organization/magazine/migrations/0005_auto_20160728_1551.py +++ /dev/null @@ -1,24 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.7 on 2016-07-28 13:51 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('organization-magazine', '0004_article_related_article'), - ] - - operations = [ - migrations.RemoveField( - model_name='article', - name='related_article', - ), - migrations.AddField( - model_name='article', - name='related_articles', - field=models.ManyToManyField(blank=True, related_name='_article_related_articles_+', to='organization-magazine.Article', verbose_name='Related posts'), - ), - ] diff --git a/app/organization/magazine/migrations/0006_auto_20160728_1632.py b/app/organization/magazine/migrations/0006_auto_20160728_1632.py deleted file mode 100644 index 623e436a..00000000 --- a/app/organization/magazine/migrations/0006_auto_20160728_1632.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.7 on 2016-07-28 14:32 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('organization-magazine', '0005_auto_20160728_1551'), - ] - - operations = [ - migrations.AlterField( - model_name='article', - name='related_articles', - field=models.ManyToManyField(blank=True, related_name='_article_related_articles_+', to='organization-magazine.Article', verbose_name='Related articles'), - ), - ] diff --git a/app/organization/magazine/migrations/0007_topic.py b/app/organization/magazine/migrations/0007_topic.py deleted file mode 100644 index 68927fef..00000000 --- a/app/organization/magazine/migrations/0007_topic.py +++ /dev/null @@ -1,29 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.7 on 2016-08-04 09:49 -from __future__ import unicode_literals - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('pages', '0002_auto_20160725_0143'), - ('organization-magazine', '0006_auto_20160728_1632'), - ] - - operations = [ - migrations.CreateModel( - name='Topic', - fields=[ - ('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='pages.Page')), - ('articles', models.ManyToManyField(blank=True, to='organization-magazine.Article', verbose_name='articles')), - ], - options={ - 'verbose_name': 'topic', - 'ordering': ('_order',), - }, - bases=('pages.page',), - ), - ] diff --git a/app/organization/magazine/migrations/0008_topic_content.py b/app/organization/magazine/migrations/0008_topic_content.py deleted file mode 100644 index c18ee88c..00000000 --- a/app/organization/magazine/migrations/0008_topic_content.py +++ /dev/null @@ -1,22 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.7 on 2016-08-04 12:51 -from __future__ import unicode_literals - -from django.db import migrations -import mezzanine.core.fields - - -class Migration(migrations.Migration): - - dependencies = [ - ('organization-magazine', '0007_topic'), - ] - - operations = [ - migrations.AddField( - model_name='topic', - name='content', - field=mezzanine.core.fields.RichTextField(default='', verbose_name='Content'), - preserve_default=False, - ), - ] diff --git a/app/organization/magazine/migrations/0009_brief_sort_order.py b/app/organization/magazine/migrations/0009_brief_sort_order.py deleted file mode 100644 index 8258483b..00000000 --- a/app/organization/magazine/migrations/0009_brief_sort_order.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.7 on 2016-08-05 13:48 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('organization-magazine', '0008_topic_content'), - ] - - operations = [ - migrations.AddField( - model_name='brief', - name='sort_order', - field=models.IntegerField(blank=True, db_index=True, default=1), - preserve_default=False, - ), - ] diff --git a/app/organization/magazine/migrations/0010_auto_20160808_0118.py b/app/organization/magazine/migrations/0010_auto_20160808_0118.py deleted file mode 100644 index 8a70bcae..00000000 --- a/app/organization/magazine/migrations/0010_auto_20160808_0118.py +++ /dev/null @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.7 on 2016-08-07 23:18 -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('organization-magazine', '0009_brief_sort_order'), - ] - - operations = [ - migrations.AlterModelOptions( - name='brief', - options={'ordering': ['sort_order'], 'verbose_name': 'brief'}, - ), - ] diff --git a/app/organization/magazine/migrations/0011_articleimage.py b/app/organization/magazine/migrations/0011_articleimage.py deleted file mode 100644 index 704be0ac..00000000 --- a/app/organization/magazine/migrations/0011_articleimage.py +++ /dev/null @@ -1,35 +0,0 @@ -# -*- 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',), - }, - ), - ] diff --git a/app/organization/magazine/migrations/0012_auto_20160812_1738.py b/app/organization/magazine/migrations/0012_auto_20160812_1738.py deleted file mode 100644 index 047fdec1..00000000 --- a/app/organization/magazine/migrations/0012_auto_20160812_1738.py +++ /dev/null @@ -1,36 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.7 on 2016-08-12 15:38 -from __future__ import unicode_literals - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('contenttypes', '0002_remove_content_type_name'), - ('organization-magazine', '0011_articleimage'), - ] - - operations = [ - migrations.CreateModel( - name='TestModel', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(max_length=200)), - ('object_id', models.PositiveIntegerField(blank=True, editable=False, null=True)), - ('content_type', models.ForeignKey(blank=True, editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType')), - ], - ), - migrations.AddField( - model_name='brief', - name='content_type', - field=models.ForeignKey(blank=True, editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType'), - ), - migrations.AddField( - model_name='brief', - name='object_id', - field=models.PositiveIntegerField(blank=True, editable=False, null=True), - ), - ] diff --git a/app/organization/magazine/migrations/0013_auto_20160812_1813.py b/app/organization/magazine/migrations/0013_auto_20160812_1813.py deleted file mode 100644 index 7bcdb9e6..00000000 --- a/app/organization/magazine/migrations/0013_auto_20160812_1813.py +++ /dev/null @@ -1,33 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.7 on 2016-08-12 16:13 -from __future__ import unicode_literals - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('organization-magazine', '0012_auto_20160812_1738'), - ] - - operations = [ - migrations.RemoveField( - model_name='testmodel', - name='content_type', - ), - migrations.AlterField( - model_name='brief', - name='content_type', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType', verbose_name='content page'), - ), - migrations.AlterField( - model_name='brief', - name='object_id', - field=models.PositiveIntegerField(null=True, verbose_name='related object'), - ), - migrations.DeleteModel( - name='TestModel', - ), - ] diff --git a/app/organization/magazine/migrations/0014_auto_20160818_1124.py b/app/organization/magazine/migrations/0014_auto_20160818_1124.py deleted file mode 100644 index 0a5f45e6..00000000 --- a/app/organization/magazine/migrations/0014_auto_20160818_1124.py +++ /dev/null @@ -1,23 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.7 on 2016-08-18 09:24 -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('organization-magazine', '0013_auto_20160812_1813'), - ] - - operations = [ - migrations.AlterModelOptions( - name='brief', - options={'verbose_name': 'brief'}, - ), - migrations.RemoveField( - model_name='brief', - name='sort_order', - ), - ] diff --git a/app/organization/magazine/migrations/0015_auto_20160818_1131.py b/app/organization/magazine/migrations/0015_auto_20160818_1131.py deleted file mode 100644 index 45407e05..00000000 --- a/app/organization/magazine/migrations/0015_auto_20160818_1131.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.7 on 2016-08-18 09:31 -from __future__ import unicode_literals - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('organization-magazine', '0014_auto_20160818_1124'), - ] - - operations = [ - migrations.AlterField( - model_name='brief', - name='content_type', - field=models.ForeignKey(blank=True, editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType', verbose_name='content page'), - ), - migrations.AlterField( - model_name='brief', - name='object_id', - field=models.PositiveIntegerField(editable=False, null=True, verbose_name='related object'), - ), - ] diff --git a/app/organization/magazine/migrations/0016_auto_20160818_1230.py b/app/organization/magazine/migrations/0016_auto_20160818_1230.py deleted file mode 100644 index 58951655..00000000 --- a/app/organization/magazine/migrations/0016_auto_20160818_1230.py +++ /dev/null @@ -1,27 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.7 on 2016-08-18 10:30 -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('organization-magazine', '0015_auto_20160818_1131'), - ] - - operations = [ - migrations.RemoveField( - model_name='brief', - name='local_content', - ), - migrations.RemoveField( - model_name='brief', - name='local_content_en', - ), - migrations.RemoveField( - model_name='brief', - name='local_content_fr', - ), - ] diff --git a/app/organization/magazine/migrations/0017_brief_external_content.py b/app/organization/magazine/migrations/0017_brief_external_content.py deleted file mode 100644 index 8cfd4363..00000000 --- a/app/organization/magazine/migrations/0017_brief_external_content.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.7 on 2016-08-18 10:31 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('organization-magazine', '0016_auto_20160818_1230'), - ] - - operations = [ - migrations.AddField( - model_name='brief', - name='external_content', - field=models.URLField(default=1, max_length=1000, verbose_name='external content'), - preserve_default=False, - ), - ] diff --git a/app/organization/magazine/migrations/0018_auto_20160818_1232.py b/app/organization/magazine/migrations/0018_auto_20160818_1232.py deleted file mode 100644 index 759203f7..00000000 --- a/app/organization/magazine/migrations/0018_auto_20160818_1232.py +++ /dev/null @@ -1,25 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.7 on 2016-08-18 10:32 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('organization-magazine', '0017_brief_external_content'), - ] - - operations = [ - migrations.AddField( - model_name='brief', - name='external_content_en', - field=models.URLField(max_length=1000, null=True, verbose_name='external content'), - ), - migrations.AddField( - model_name='brief', - name='external_content_fr', - field=models.URLField(max_length=1000, null=True, verbose_name='external content'), - ), - ] diff --git a/app/organization/magazine/migrations/0019_auto_20160818_1233.py b/app/organization/magazine/migrations/0019_auto_20160818_1233.py deleted file mode 100644 index eaef703c..00000000 --- a/app/organization/magazine/migrations/0019_auto_20160818_1233.py +++ /dev/null @@ -1,20 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.7 on 2016-08-18 10:33 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('organization-magazine', '0018_auto_20160818_1232'), - ] - - operations = [ - migrations.AlterField( - model_name='brief', - name='external_content', - field=models.URLField(max_length=1000, null=True, verbose_name='external content'), - ), - ] diff --git a/app/organization/magazine/migrations/0020_auto_20160818_1238.py b/app/organization/magazine/migrations/0020_auto_20160818_1238.py deleted file mode 100644 index b2a1b576..00000000 --- a/app/organization/magazine/migrations/0020_auto_20160818_1238.py +++ /dev/null @@ -1,30 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.7 on 2016-08-18 10:38 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('organization-magazine', '0019_auto_20160818_1233'), - ] - - operations = [ - migrations.AlterField( - model_name='brief', - name='external_content', - field=models.URLField(blank=True, max_length=1000, verbose_name='external content'), - ), - migrations.AlterField( - model_name='brief', - name='external_content_en', - field=models.URLField(blank=True, max_length=1000, null=True, verbose_name='external content'), - ), - migrations.AlterField( - model_name='brief', - name='external_content_fr', - field=models.URLField(blank=True, max_length=1000, null=True, verbose_name='external content'), - ), - ] diff --git a/app/organization/magazine/models.py b/app/organization/magazine/models.py index 9c8c8e72..1bfb1484 100644 --- a/app/organization/magazine/models.py +++ b/app/organization/magazine/models.py @@ -10,22 +10,12 @@ 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 orderable.models import Orderable -from organization.core.models import Named, Description, Image, Photo +from organization.core.models import * -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): +class Article(BlogPost, SubTitled): - sub_title = models.CharField(_('sub title'), blank=True, max_length=1000) related_articles = models.ManyToManyField("self", verbose_name=_("Related articles"), blank=True) @@ -38,6 +28,16 @@ class Article(BlogPost, Photo): verbose_name = _('article') +class ArticleImage(Image): + + article = models.ForeignKey("Article", verbose_name=_('article'), related_name='images', blank=True, null=True, on_delete=models.SET_NULL) + + class Meta: + verbose_name = _("image") + verbose_name_plural = _("images") + order_with_respect_to = "article" + + class Brief(Displayable, RichText): #Orderable text_button = models.CharField(blank=True, max_length=150, null=False, verbose_name='text button') diff --git a/app/organization/magazine/views.py b/app/organization/magazine/views.py index 366d75cb..d959e75c 100644 --- a/app/organization/magazine/views.py +++ b/app/organization/magazine/views.py @@ -12,7 +12,7 @@ from dal_select2_queryset_sequence.views import Select2QuerySetSequenceView from mezzanine_agenda.models import Event from organization.magazine.models import Article, Topic, Brief from organization.network.models import Department -from organization.core.models import BasicPage +from organization.pages.models import CustomPage from organization.core.views import SlugMixin from django.template.defaultfilters import slugify @@ -89,15 +89,15 @@ class ObjectAutocomplete(Select2QuerySetSequenceView): def get_queryset(self): articles = Article.objects.all() - basicpage = BasicPage.objects.all() + custompage = CustomPage.objects.all() events = Event.objects.all() if self.q: articles = articles.filter(title__icontains=self.q) - basicpage = basicpage.filter(title__icontains=self.q) + custompage = custompage.filter(title__icontains=self.q) events = events.filter(title__icontains=self.q) - qs = autocomplete.QuerySetSequence(articles, basicpage, events ) + qs = autocomplete.QuerySetSequence(articles, custompage, events ) if self.q: # This would apply the filter on all the querysets diff --git a/app/organization/media/migrations/0001_initial.py b/app/organization/media/migrations/0001_initial.py index 74c72d67..dbd0158f 100644 --- a/app/organization/media/migrations/0001_initial.py +++ b/app/organization/media/migrations/0001_initial.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.9.7 on 2016-07-14 16:54 +# Generated by Django 1.9.7 on 2016-08-23 17:45 from __future__ import unicode_literals from django.db import migrations, models @@ -54,9 +54,10 @@ class Migration(migrations.Migration): name='Playlist', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('title', models.CharField(max_length=512, verbose_name='title')), - ('description', models.TextField(blank=True, verbose_name='description')), + ('title', models.CharField(max_length=500, verbose_name='Title')), + ('slug', models.CharField(blank=True, help_text='Leave blank to have the URL auto-generated from the title.', max_length=2000, null=True, verbose_name='URL')), ('audios', models.ManyToManyField(blank=True, related_name='playlists', to='organization-media.Audio', verbose_name='audios')), + ('site', models.ForeignKey(editable=False, on_delete=django.db.models.deletion.CASCADE, to='sites.Site')), ], options={ 'abstract': False, diff --git a/app/organization/media/migrations/0002_auto_20160721_1351.py b/app/organization/media/migrations/0002_auto_20160721_1351.py deleted file mode 100644 index a7614ae8..00000000 --- a/app/organization/media/migrations/0002_auto_20160721_1351.py +++ /dev/null @@ -1,33 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.7 on 2016-07-21 11:51 -from __future__ import unicode_literals - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('sites', '0002_alter_domain_unique'), - ('organization-media', '0001_initial'), - ] - - operations = [ - migrations.AddField( - model_name='playlist', - name='site', - field=models.ForeignKey(default=1, editable=False, on_delete=django.db.models.deletion.CASCADE, to='sites.Site'), - preserve_default=False, - ), - migrations.AddField( - model_name='playlist', - name='slug', - field=models.CharField(blank=True, help_text='Leave blank to have the URL auto-generated from the title.', max_length=2000, null=True, verbose_name='URL'), - ), - migrations.AlterField( - model_name='playlist', - name='title', - field=models.CharField(max_length=500, verbose_name='Title'), - ), - ] diff --git a/app/organization/media/migrations/0003_remove_playlist_description.py b/app/organization/media/migrations/0003_remove_playlist_description.py deleted file mode 100644 index 23459290..00000000 --- a/app/organization/media/migrations/0003_remove_playlist_description.py +++ /dev/null @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.7 on 2016-07-27 13:53 -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('organization-media', '0002_auto_20160721_1351'), - ] - - operations = [ - migrations.RemoveField( - model_name='playlist', - name='description', - ), - ] diff --git a/app/organization/media/models.py b/app/organization/media/models.py index d13c8a6d..4945a486 100644 --- a/app/organization/media/models.py +++ b/app/organization/media/models.py @@ -69,7 +69,7 @@ class Video(Media): open_source_mime_type = 'video/webm' closed_source_mime_type = 'video/mp4' - category = models.ForeignKey('VideoCategory', related_name='videos', verbose_name=_('category'), blank=True, null=True, on_delete=models.SET_NULL) + category = models.ForeignKey('VideoCategory', verbose_name=_('category'), related_name='videos', blank=True, null=True, on_delete=models.SET_NULL) class Meta: verbose_name = _('video') @@ -97,7 +97,6 @@ class Playlist(Slugged): """(Playlist description)""" audios = models.ManyToManyField('Audio', verbose_name=_('audios'), related_name='playlists', blank=True) - #description = models.OneToOneField('organization-core.Description', verbose_name=_('description'), related_name='description', blank=True, on_delete=models.CASCADE) def __str__(self): return self.title diff --git a/app/organization/network/admin.py b/app/organization/network/admin.py index 91a71ceb..9e9d15df 100644 --- a/app/organization/network/admin.py +++ b/app/organization/network/admin.py @@ -5,28 +5,34 @@ from mezzanine.core.admin import * from mezzanine.pages.admin import PageAdmin from organization.network.models import * +from organization.pages.models import * from organization.core.admin import * +class OrganizationImageInline(TabularDynamicInlineAdmin): + + model = ModelImage + + class OrganizationAdmin(BaseTranslationModelAdmin): model = Organization + inlines = [OrganizationImageInline,] -class PersonActivityInline(StackedDynamicInlineAdmin): +class DepartmentPageImageInline(TabularDynamicInlineAdmin): - model = PersonActivity - fk_name = 'person' + model = PageImage -class DepartmentAdmin(BaseTranslationModelAdmin): +class DepartmentPageAdmin(PageAdmin): - model = Department + inlines = [DepartmentPageImageInline,] -class DepartmentPageAdmin(PageAdmin): +class DepartmentAdmin(BaseTranslationModelAdmin): - inlines = [PageBlockInline, PageImageInline] + model = Department class TeamAdmin(BaseTranslationModelAdmin): @@ -34,9 +40,14 @@ class TeamAdmin(BaseTranslationModelAdmin): model = Team +class TeamPageImageInline(TabularDynamicInlineAdmin): + + model = PageImage + + class TeamPageAdmin(PageAdmin): - inlines = [PageBlockInline, PageImageInline] + inlines = [TeamPageImageInline,] class PersonAdminBase(BaseTranslationModelAdmin): @@ -46,13 +57,24 @@ class PersonAdminBase(BaseTranslationModelAdmin): class PersonLinkInline(StackedDynamicInlineAdmin): - model = PersonLink + model = DisplayableLink + + +class PersonActivityInline(StackedDynamicInlineAdmin): + + model = PersonActivity + fk_name = 'person' + + +class PersonImageInline(TabularDynamicInlineAdmin): + + model = DisplayableImage class PersonAdmin(BaseTranslationModelAdmin): model = Person - inlines = [PersonActivityInline, PersonLinkInline, ] + inlines = [PersonImageInline, PersonActivityInline, PersonLinkInline, ] first_fields = ['last_name', 'first_name', 'title', 'gender', 'user'] def get_fieldsets(self, request, obj = None): @@ -66,7 +88,7 @@ class PersonAdmin(BaseTranslationModelAdmin): admin.site.register(Organization, OrganizationAdmin) admin.site.register(OrganizationType) admin.site.register(Department, DepartmentAdmin) -admin.site.register(Team, TeamAdmin) admin.site.register(DepartmentPage, DepartmentPageAdmin) +admin.site.register(Team, TeamAdmin) admin.site.register(TeamPage, TeamPageAdmin) admin.site.register(Person, PersonAdmin) diff --git a/app/organization/network/migrations/0001_initial.py b/app/organization/network/migrations/0001_initial.py index 29f36742..17443fa2 100644 --- a/app/organization/network/migrations/0001_initial.py +++ b/app/organization/network/migrations/0001_initial.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.9.7 on 2016-08-23 12:25 +# Generated by Django 1.9.7 on 2016-08-23 17:45 from __future__ import unicode_literals from django.db import migrations, models @@ -15,7 +15,7 @@ class Migration(migrations.Migration): dependencies = [ ('pages', '0004_auto_20160804_1547'), - ('organization-core', '0013_auto_20160823_1359'), + ('organization-core', '0001_initial'), ] operations = [ @@ -52,15 +52,6 @@ class Migration(migrations.Migration): 'verbose_name': 'activity status', }, ), - migrations.CreateModel( - name='Address', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('address', models.TextField(blank=True, verbose_name='address')), - ('postal_code', models.CharField(blank=True, max_length=16, verbose_name='postal code')), - ('country', django_countries.fields.CountryField(max_length=2, verbose_name='country')), - ], - ), migrations.CreateModel( name='BudgetCode', fields=[ @@ -97,22 +88,33 @@ class Migration(migrations.Migration): ('sub_title', models.TextField(blank=True, max_length=1024, verbose_name='sub title')), ('sub_title_fr', models.TextField(blank=True, max_length=1024, null=True, verbose_name='sub title')), ('sub_title_en', models.TextField(blank=True, max_length=1024, null=True, verbose_name='sub title')), - ('photo', mezzanine.core.fields.FileField(blank=True, max_length=1024, verbose_name='photo')), - ('photo_credits', models.CharField(blank=True, max_length=255, null=True, verbose_name='photo credits')), - ('photo_alignment', models.CharField(blank=True, choices=[('left', 'left'), ('center', 'center'), ('right', 'right')], default='left', max_length=32, verbose_name='photo alignment')), - ('photo_description', models.TextField(blank=True, verbose_name='photo description')), - ('photo_card', mezzanine.core.fields.FileField(blank=True, max_length=1024, verbose_name='card photo')), - ('photo_card_credits', models.CharField(blank=True, max_length=255, null=True, verbose_name='photo card credits')), - ('photo_slider', mezzanine.core.fields.FileField(blank=True, max_length=1024, verbose_name='slider photo')), - ('photo_slider_credits', models.CharField(blank=True, max_length=255, null=True, verbose_name='photo slider credits')), ('weaving_css_class', models.CharField(blank=True, choices=[('pattern-bg--circles', 'circles'), ('pattern-bg--squares', 'squares'), ('pattern-bg--stripes', 'stripes'), ('pattern-bg--triangles', 'triangles')], max_length=64, verbose_name='background pattern')), ], options={ - 'ordering': ('_order',), 'verbose_name': 'department page', + 'ordering': ('_order',), }, bases=('pages.page', models.Model), ), + migrations.CreateModel( + name='Organization', + fields=[ + ('custommodel_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='organization-core.CustomModel')), + ('name', models.CharField(max_length=512, verbose_name='name')), + ('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')), + ('url', models.URLField(blank=True, max_length=512, verbose_name='URL')), + ('address', models.TextField(blank=True, verbose_name='address')), + ('postal_code', models.CharField(blank=True, max_length=16, verbose_name='postal code')), + ('country', django_countries.fields.CountryField(max_length=2, verbose_name='country')), + ('is_on_map', models.BooleanField(default=True, verbose_name='is on map')), + ], + options={ + 'verbose_name': 'organization', + }, + bases=('organization-core.custommodel', models.Model), + ), migrations.CreateModel( name='OrganizationType', fields=[ @@ -127,28 +129,7 @@ class Migration(migrations.Migration): migrations.CreateModel( name='Person', fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('keywords_string', models.CharField(blank=True, editable=False, max_length=500)), - ('title', models.CharField(max_length=500, verbose_name='Title')), - ('slug', models.CharField(blank=True, help_text='Leave blank to have the URL auto-generated from the title.', max_length=2000, null=True, verbose_name='URL')), - ('_meta_title', models.CharField(blank=True, help_text='Optional title to be used in the HTML title tag. If left blank, the main title field will be used.', max_length=500, null=True, verbose_name='Title')), - ('description', models.TextField(blank=True, verbose_name='Description')), - ('gen_description', models.BooleanField(default=True, help_text='If checked, the description will be automatically generated from content. Uncheck if you want to manually set a custom description.', verbose_name='Generate description')), - ('created', models.DateTimeField(editable=False, null=True)), - ('updated', models.DateTimeField(editable=False, null=True)), - ('status', models.IntegerField(choices=[(1, 'Draft'), (2, 'Published')], default=2, help_text='With Draft chosen, will only be shown for admin users on the site.', verbose_name='Status')), - ('publish_date', models.DateTimeField(blank=True, db_index=True, help_text="With Published chosen, won't be shown until this time", null=True, verbose_name='Published from')), - ('expiry_date', models.DateTimeField(blank=True, help_text="With Published chosen, won't be shown after this time", null=True, verbose_name='Expires on')), - ('short_url', models.URLField(blank=True, null=True)), - ('in_sitemap', models.BooleanField(default=True, verbose_name='Show in sitemap')), - ('photo', mezzanine.core.fields.FileField(blank=True, max_length=1024, verbose_name='photo')), - ('photo_credits', models.CharField(blank=True, max_length=255, null=True, verbose_name='photo credits')), - ('photo_alignment', models.CharField(blank=True, choices=[('left', 'left'), ('center', 'center'), ('right', 'right')], default='left', max_length=32, verbose_name='photo alignment')), - ('photo_description', models.TextField(blank=True, verbose_name='photo description')), - ('photo_card', mezzanine.core.fields.FileField(blank=True, max_length=1024, verbose_name='card photo')), - ('photo_card_credits', models.CharField(blank=True, max_length=255, null=True, verbose_name='photo card credits')), - ('photo_slider', mezzanine.core.fields.FileField(blank=True, max_length=1024, verbose_name='slider photo')), - ('photo_slider_credits', models.CharField(blank=True, max_length=255, null=True, verbose_name='photo slider credits')), + ('customdisplayable_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='organization-core.CustomDisplayable')), ('person_title', models.CharField(blank=True, choices=[('Dr', 'Dr'), ('Prof', 'Prof'), ('Prof Dr', 'Prof Dr')], max_length=16, verbose_name='title')), ('gender', models.CharField(blank=True, choices=[('male', 'male'), ('female', 'female')], max_length=16, verbose_name='gender')), ('first_name', models.CharField(blank=True, max_length=255, null=True, verbose_name='first name')), @@ -160,10 +141,10 @@ class Migration(migrations.Migration): ('permanent', models.BooleanField(default=False, verbose_name='permanent')), ], options={ - 'ordering': ['last_name'], 'verbose_name': 'person', + 'ordering': ['last_name'], }, - bases=(mezzanine.utils.models.AdminThumbMixin, models.Model), + bases=('organization-core.customdisplayable', mezzanine.utils.models.AdminThumbMixin), ), migrations.CreateModel( name='PersonActivity', @@ -189,29 +170,20 @@ class Migration(migrations.Migration): ('date_added', models.DateTimeField(auto_now_add=True, verbose_name='add date')), ('date_modified', models.DateTimeField(auto_now=True, verbose_name='modification date')), ('date_modified_manual', models.DateTimeField(blank=True, null=True, verbose_name='manual modification date')), + ('attachment_organization', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='attachment_activity', to='organization-network.Organization', verbose_name='attachment organization')), ('budget_code', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='organization-network.BudgetCode')), + ('employer', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='employer_activity', to='organization-network.Organization', verbose_name='employer')), ('framework', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='organization-network.ActivityFramework', verbose_name='framework')), ('grade', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='organization-network.ActivityGrade', verbose_name='grade')), ('person', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='organization-network.Person', verbose_name='person')), ('phd_director', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='phd_director_activity', to='organization-network.Person', verbose_name='PhD director')), + ('phd_doctoral_school', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='organization-network.Organization', verbose_name='doctoral school')), ('phd_officer_1', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='phd_officer_1_activity', to='organization-network.Person', verbose_name='PhD officer 1')), ('phd_officer_2', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='phd_officer_2_activity', to='organization-network.Person', verbose_name='PhD officer 2')), ], options={ - 'verbose_name_plural': 'activities', 'verbose_name': 'activity', - }, - ), - migrations.CreateModel( - name='PersonLink', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('url', models.URLField(verbose_name='URL')), - ('link_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='organization-core.LinkType', verbose_name='link type')), - ('person', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='organization-network.Person', verbose_name='person')), - ], - options={ - 'verbose_name': 'person link', + 'verbose_name_plural': 'activities', }, ), migrations.CreateModel( @@ -235,27 +207,14 @@ class Migration(migrations.Migration): ('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')), - ('web_site', models.URLField(blank=True, max_length=512, verbose_name='web site')), + ('url', models.URLField(blank=True, max_length=512, verbose_name='URL')), ('department', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='teams', to='organization-network.Department', verbose_name='department')), + ('organization', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='teams', to='organization-network.Organization', verbose_name='organization')), ], options={ 'verbose_name': 'team', }, ), - migrations.CreateModel( - name='TeamLink', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('url', models.URLField(verbose_name='URL')), - ('link_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='organization-core.LinkType', verbose_name='link type')), - ('team', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='organization-network.Team', verbose_name='links')), - ], - options={ - 'verbose_name_plural': 'links', - 'abstract': False, - 'verbose_name': 'link', - }, - ), migrations.CreateModel( name='TeamPage', fields=[ @@ -266,19 +225,11 @@ class Migration(migrations.Migration): ('sub_title', models.TextField(blank=True, max_length=1024, verbose_name='sub title')), ('sub_title_fr', models.TextField(blank=True, max_length=1024, null=True, verbose_name='sub title')), ('sub_title_en', models.TextField(blank=True, max_length=1024, null=True, verbose_name='sub title')), - ('photo', mezzanine.core.fields.FileField(blank=True, max_length=1024, verbose_name='photo')), - ('photo_credits', models.CharField(blank=True, max_length=255, null=True, verbose_name='photo credits')), - ('photo_alignment', models.CharField(blank=True, choices=[('left', 'left'), ('center', 'center'), ('right', 'right')], default='left', max_length=32, verbose_name='photo alignment')), - ('photo_description', models.TextField(blank=True, verbose_name='photo description')), - ('photo_card', mezzanine.core.fields.FileField(blank=True, max_length=1024, verbose_name='card photo')), - ('photo_card_credits', models.CharField(blank=True, max_length=255, null=True, verbose_name='photo card credits')), - ('photo_slider', mezzanine.core.fields.FileField(blank=True, max_length=1024, verbose_name='slider photo')), - ('photo_slider_credits', models.CharField(blank=True, max_length=255, null=True, verbose_name='photo slider credits')), - ('team', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='organization-network.Team', verbose_name='team')), + ('team', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='pages', to='organization-network.Team', verbose_name='team')), ], options={ - 'ordering': ('_order',), 'verbose_name': 'team page', + 'ordering': ('_order',), }, bases=('pages.page', models.Model), ), @@ -326,29 +277,4 @@ class Migration(migrations.Migration): 'verbose_name': 'training type', }, ), - migrations.CreateModel( - name='Organization', - fields=[ - ('address_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='organization-network.Address')), - ('title', models.CharField(max_length=500, verbose_name='Title')), - ('slug', models.CharField(blank=True, help_text='Leave blank to have the URL auto-generated from the title.', max_length=2000, null=True, verbose_name='URL')), - ('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')), - ('photo', mezzanine.core.fields.FileField(blank=True, max_length=1024, verbose_name='photo')), - ('photo_credits', models.CharField(blank=True, max_length=255, null=True, verbose_name='photo credits')), - ('photo_alignment', models.CharField(blank=True, choices=[('left', 'left'), ('center', 'center'), ('right', 'right')], default='left', max_length=32, verbose_name='photo alignment')), - ('photo_description', models.TextField(blank=True, verbose_name='photo description')), - ('photo_card', mezzanine.core.fields.FileField(blank=True, max_length=1024, verbose_name='card photo')), - ('photo_card_credits', models.CharField(blank=True, max_length=255, null=True, verbose_name='photo card credits')), - ('photo_slider', mezzanine.core.fields.FileField(blank=True, max_length=1024, verbose_name='slider photo')), - ('photo_slider_credits', models.CharField(blank=True, max_length=255, null=True, verbose_name='photo slider credits')), - ('website', models.URLField(blank=True, max_length=512, verbose_name='website')), - ('is_on_map', models.BooleanField(default=True, verbose_name='is on map')), - ], - options={ - 'verbose_name': 'organization', - }, - bases=('organization-network.address', models.Model), - ), ] diff --git a/app/organization/network/migrations/0002_auto_20160823_1425.py b/app/organization/network/migrations/0002_auto_20160823_1425.py deleted file mode 100644 index 4926eb69..00000000 --- a/app/organization/network/migrations/0002_auto_20160823_1425.py +++ /dev/null @@ -1,122 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.7 on 2016-08-23 12:25 -from __future__ import unicode_literals - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - ('organization-network', '0001_initial'), - ('sites', '0002_alter_domain_unique'), - ('organization-projects', '0001_initial'), - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ] - - operations = [ - migrations.AddField( - model_name='personactivity', - name='project', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='organization-projects.Project', verbose_name='project'), - ), - migrations.AddField( - model_name='personactivity', - name='record_piece', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='organization-network.RecordPiece'), - ), - migrations.AddField( - model_name='personactivity', - name='second_team', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='second_team_activity', to='organization-network.Team', verbose_name='second team'), - ), - migrations.AddField( - model_name='personactivity', - name='status', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='organization-network.ActivityStatus', verbose_name='status'), - ), - migrations.AddField( - model_name='personactivity', - name='team', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='team_activity', to='organization-network.Team', verbose_name='team'), - ), - migrations.AddField( - model_name='personactivity', - name='training_level', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='organization-network.TrainingLevel', verbose_name='training level'), - ), - migrations.AddField( - model_name='personactivity', - name='training_speciality', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='organization-network.TrainingSpectiality', verbose_name='training speciality'), - ), - migrations.AddField( - model_name='personactivity', - name='training_topic', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='organization-network.TrainingTopic', verbose_name='training topic'), - ), - migrations.AddField( - model_name='personactivity', - name='training_type', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='organization-network.TrainingType', verbose_name='training type'), - ), - migrations.AddField( - model_name='person', - name='site', - field=models.ForeignKey(editable=False, on_delete=django.db.models.deletion.CASCADE, to='sites.Site'), - ), - migrations.AddField( - model_name='person', - name='user', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='user'), - ), - migrations.AddField( - model_name='departmentpage', - name='department', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='organization-network.Department', verbose_name='department'), - ), - migrations.AddField( - model_name='team', - name='organization', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='teams', to='organization-network.Organization', verbose_name='organization'), - ), - migrations.AddField( - model_name='personactivity', - name='attachment_organization', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='attachment_activity', to='organization-network.Organization', verbose_name='attachment organization'), - ), - migrations.AddField( - model_name='personactivity', - name='employer', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='employer_activity', to='organization-network.Organization', verbose_name='employer'), - ), - migrations.AddField( - model_name='personactivity', - name='phd_doctoral_school', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='organization-network.Organization', verbose_name='doctoral school'), - ), - migrations.AddField( - model_name='personactivity', - name='second_employer', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='second_employer_activity', to='organization-network.Organization', verbose_name='second employer'), - ), - migrations.AddField( - model_name='organization', - name='site', - field=models.ForeignKey(editable=False, on_delete=django.db.models.deletion.CASCADE, to='sites.Site'), - ), - migrations.AddField( - model_name='organization', - name='type', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='organization-network.OrganizationType', verbose_name='organization type'), - ), - migrations.AddField( - model_name='department', - name='organization', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='departments', to='organization-network.Organization', verbose_name='organization'), - ), - ] diff --git a/app/organization/network/migrations/0002_auto_20160823_1945.py b/app/organization/network/migrations/0002_auto_20160823_1945.py new file mode 100644 index 00000000..c1789652 --- /dev/null +++ b/app/organization/network/migrations/0002_auto_20160823_1945.py @@ -0,0 +1,91 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.7 on 2016-08-23 17:45 +from __future__ import unicode_literals + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('organization-projects', '0001_initial'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('organization-network', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='personactivity', + name='project', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='organization-projects.Project', verbose_name='project'), + ), + migrations.AddField( + model_name='personactivity', + name='record_piece', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='organization-network.RecordPiece'), + ), + migrations.AddField( + model_name='personactivity', + name='second_employer', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='second_employer_activity', to='organization-network.Organization', verbose_name='second employer'), + ), + migrations.AddField( + model_name='personactivity', + name='second_team', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='second_team_activity', to='organization-network.Team', verbose_name='second team'), + ), + migrations.AddField( + model_name='personactivity', + name='status', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='organization-network.ActivityStatus', verbose_name='status'), + ), + migrations.AddField( + model_name='personactivity', + name='team', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='team_activity', to='organization-network.Team', verbose_name='team'), + ), + migrations.AddField( + model_name='personactivity', + name='training_level', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='organization-network.TrainingLevel', verbose_name='training level'), + ), + migrations.AddField( + model_name='personactivity', + name='training_speciality', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='organization-network.TrainingSpectiality', verbose_name='training speciality'), + ), + migrations.AddField( + model_name='personactivity', + name='training_topic', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='organization-network.TrainingTopic', verbose_name='training topic'), + ), + migrations.AddField( + model_name='personactivity', + name='training_type', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='organization-network.TrainingType', verbose_name='training type'), + ), + migrations.AddField( + model_name='person', + name='user', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='user'), + ), + migrations.AddField( + model_name='organization', + name='type', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='organization-network.OrganizationType', verbose_name='organization type'), + ), + migrations.AddField( + model_name='departmentpage', + name='department', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='pages', to='organization-network.Department', verbose_name='department'), + ), + migrations.AddField( + model_name='department', + name='organization', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='departments', to='organization-network.Organization', verbose_name='organization'), + ), + ] diff --git a/app/organization/network/migrations/0003_auto_20160823_1438.py b/app/organization/network/migrations/0003_auto_20160823_1438.py deleted file mode 100644 index 1d9b3394..00000000 --- a/app/organization/network/migrations/0003_auto_20160823_1438.py +++ /dev/null @@ -1,42 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.9.7 on 2016-08-23 12:38 -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('organization-network', '0002_auto_20160823_1425'), - ] - - operations = [ - migrations.RemoveField( - model_name='organization', - name='site', - ), - migrations.RemoveField( - model_name='organization', - name='slug', - ), - migrations.RemoveField( - model_name='organization', - name='title', - ), - migrations.RemoveField( - model_name='organization', - name='website', - ), - migrations.AddField( - model_name='organization', - name='name', - field=models.CharField(default='', max_length=512, verbose_name='name'), - preserve_default=False, - ), - migrations.AddField( - model_name='organization', - name='web_site', - field=models.URLField(blank=True, max_length=512, verbose_name='web site'), - ), - ] diff --git a/app/organization/network/models.py b/app/organization/network/models.py index d0835438..7c089324 100644 --- a/app/organization/network/models.py +++ b/app/organization/network/models.py @@ -61,21 +61,21 @@ class Address(models.Model): def __str__(self): return ' '.join((self.address, self.postal_code)) - class Meta: - abstract = True + class Meta: + abstract = True -class Organization(Named, Address, Photo): +class Organization(CustomModel, Named, Address, URL): """(Organization description)""" type = models.ForeignKey('OrganizationType', verbose_name=_('organization type'), blank=True, null=True, on_delete=models.SET_NULL) - web_site = models.URLField(_('web site'), max_length=512, blank=True) is_on_map = models.BooleanField(_('is on map'), default=True) class Meta: verbose_name = _('organization') + class OrganizationType(Named): """(OrganizationType description)""" @@ -97,22 +97,21 @@ class Department(Named): return self.name -class DepartmentPage(Page, SubTitle, RichText, Photo): +class DepartmentPage(Page, SubTitled, RichText): """(Department description)""" - department = models.ForeignKey('Department', verbose_name=_('department')) + department = models.ForeignKey('Department', verbose_name=_('department'), related_name="pages", blank=True, null=True, on_delete=models.SET_NULL) weaving_css_class = models.CharField(_('background pattern'), choices=PATTERN_CHOICES, max_length=64, blank=True) class Meta: verbose_name = _('department page') -class Team(Named): +class Team(Named, URL): """(Team description)""" organization = models.ForeignKey('Organization', verbose_name=_('organization'), related_name="teams", blank=True, null=True, on_delete=models.SET_NULL) department = models.ForeignKey('Department', verbose_name=_('department'), related_name="teams", blank=True, null=True, on_delete=models.SET_NULL) - web_site = models.URLField(_('web site'), max_length=512, blank=True) class Meta: verbose_name = _('team') @@ -128,16 +127,17 @@ class Team(Named): return self.name -class TeamPage(Page, SubTitle, RichText, Photo): +class TeamPage(Page, SubTitled, RichText): """(Team description)""" - team = models.ForeignKey('Team', verbose_name=_('team')) + team = models.ForeignKey('Team', verbose_name=_('team'), related_name="pages", blank=True, null=True, on_delete=models.SET_NULL) class Meta: verbose_name = _('team page') -class Person(Displayable, AdminThumbMixin, Photo): + +class Person(CustomDisplayable, AdminThumbMixin): """(Person description)""" user = models.ForeignKey(User, verbose_name=_('user'), blank=True, null=True, on_delete=models.SET_NULL) @@ -180,13 +180,6 @@ class Person(Displayable, AdminThumbMixin, Photo): super(Person, self).save(*args, **kwargs) -class TeamLink(Link): - - team = models.ForeignKey(Team, verbose_name=_('links')) - - def __str__(self): - return self.url - class ActivityStatus(Named): @@ -291,12 +284,3 @@ class PersonActivity(Description, Period, RichText): def __unicode__(self): return ' - '.join((self.person, self.role, self.date_begin, self.date_end)) - - -class PersonLink(Link): - """A person can have many links.""" - - person = models.ForeignKey('Person', verbose_name=_('person')) - - class Meta: - verbose_name = _('person link') diff --git a/app/organization/network/translation.py b/app/organization/network/translation.py index 8a310062..50280d97 100644 --- a/app/organization/network/translation.py +++ b/app/organization/network/translation.py @@ -14,17 +14,19 @@ class DepartmentTranslationOptions(TranslationOptions): fields = ('name', 'description') + +@register(DepartmentPage) +class DepartmentPageTranslationOptions(TranslationOptions): + + fields = ('sub_title', 'content',) + + @register(Team) class TeamTranslationOptions(TranslationOptions): fields = ('name', 'description') -@register(DepartmentPage) -class DepartmentTranslationOptions(TranslationOptions): - - fields = ('sub_title', 'content',) - @register(TeamPage) class TeamTranslationOptions(TranslationOptions): @@ -41,9 +43,3 @@ class PersonTranslationOptions(TranslationOptions): class PersonActivityTranslationOptions(TranslationOptions): fields = ('description', 'content') - - -@register(PersonLink) -class PersonTranslationOptions(TranslationOptions): - - pass diff --git a/app/organization/pages/admin.py b/app/organization/pages/admin.py index 517d2ca8..1e342399 100644 --- a/app/organization/pages/admin.py +++ b/app/organization/pages/admin.py @@ -5,11 +5,25 @@ from mezzanine.utils.static import static_lazy as static from copy import deepcopy from mezzanine.core.admin import * from mezzanine.pages.admin import PageAdmin -from organization.core.models import * +from organization.pages.models import * from organization.pages.models import DynamicContentHomeSlider, DynamicContentHomeBody, Home from organization.pages.forms import DynamicContentHomeSliderForm, DynamicContentHomeBodyForm -# Register your models here. + +class PageBlockInline(StackedDynamicInlineAdmin): + + model = PageBlock + + +class PageImageInline(TabularDynamicInlineAdmin): + + model = PageImage + + +class CustomPageAdmin(PageAdmin): + + inlines = [PageBlockInline, PageImageInline] + class DynamicContentHomeSliderInline(TabularDynamicInlineAdmin): @@ -33,4 +47,7 @@ class HomeAdminDisplayable(BaseTranslationModelAdmin): inlines = [DynamicContentHomeSliderInline, DynamicContentHomeBodyInline ] + + +admin.site.register(CustomPage, CustomPageAdmin) admin.site.register(Home, HomeAdminDisplayable) diff --git a/app/organization/pages/forms.py b/app/organization/pages/forms.py index 58439fe4..763576ce 100644 --- a/app/organization/pages/forms.py +++ b/app/organization/pages/forms.py @@ -4,7 +4,7 @@ import dal_queryset_sequence import dal_select2_queryset_sequence from mezzanine.core.models import Orderable from organization.magazine.models import Article, Topic, Brief -from organization.core.models import BasicPage +from organization.pages.models import CustomPage from mezzanine_agenda.models import Event from organization.pages.models import DynamicContentHomeSlider, DynamicContentHomeBody @@ -14,7 +14,7 @@ class DynamicContentHomeSliderForm(autocomplete.FutureModelForm): queryset=autocomplete.QuerySetSequence( Article.objects.all(), Event.objects.all(), - BasicPage.objects.all(), + CustomPage.objects.all(), ), required=False, widget=dal_select2_queryset_sequence.widgets.QuerySetSequenceSelect2('dynamic-content-home-slider'), @@ -34,7 +34,7 @@ class DynamicContentHomeBodyForm(autocomplete.FutureModelForm): queryset=autocomplete.QuerySetSequence( Article.objects.all(), Event.objects.all(), - BasicPage.objects.all(), + CustomPage.objects.all(), Brief.objects.all(), ), required=False, diff --git a/app/organization/pages/migrations/0001_initial.py b/app/organization/pages/migrations/0001_initial.py index 1f476f08..3d764a74 100644 --- a/app/organization/pages/migrations/0001_initial.py +++ b/app/organization/pages/migrations/0001_initial.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.9.7 on 2016-08-19 10:40 +# Generated by Django 1.9.7 on 2016-08-23 17:45 from __future__ import unicode_literals from django.db import migrations, models @@ -12,11 +12,29 @@ class Migration(migrations.Migration): initial = True dependencies = [ - ('contenttypes', '0002_remove_content_type_name'), + ('pages', '0004_auto_20160804_1547'), ('sites', '0002_alter_domain_unique'), + ('contenttypes', '0002_remove_content_type_name'), ] operations = [ + migrations.CreateModel( + name='CustomPage', + fields=[ + ('page_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='pages.Page')), + ('content', mezzanine.core.fields.RichTextField(verbose_name='Content')), + ('content_fr', mezzanine.core.fields.RichTextField(null=True, verbose_name='Content')), + ('content_en', mezzanine.core.fields.RichTextField(null=True, verbose_name='Content')), + ('sub_title', models.TextField(blank=True, max_length=1024, verbose_name='sub title')), + ('sub_title_fr', models.TextField(blank=True, max_length=1024, null=True, verbose_name='sub title')), + ('sub_title_en', models.TextField(blank=True, max_length=1024, null=True, verbose_name='sub title')), + ], + options={ + 'verbose_name': 'basic page', + 'ordering': ('_order',), + }, + bases=('pages.page', models.Model), + ), migrations.CreateModel( name='DynamicContentHomeBody', fields=[ @@ -63,7 +81,50 @@ class Migration(migrations.Migration): ('site', models.ForeignKey(editable=False, on_delete=django.db.models.deletion.CASCADE, to='sites.Site')), ], options={ - 'verbose_name': 'Home', + 'verbose_name': 'home', + 'verbose_name_plural': 'homes', + }, + ), + migrations.CreateModel( + name='PageBlock', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('content', mezzanine.core.fields.RichTextField(verbose_name='Content')), + ('content_fr', mezzanine.core.fields.RichTextField(null=True, verbose_name='Content')), + ('content_en', mezzanine.core.fields.RichTextField(null=True, verbose_name='Content')), + ('_order', mezzanine.core.fields.OrderField(null=True, verbose_name='Order')), + ('title', models.CharField(max_length=1024, verbose_name='title')), + ('title_fr', models.CharField(max_length=1024, null=True, verbose_name='title')), + ('title_en', models.CharField(max_length=1024, null=True, verbose_name='title')), + ('description', models.TextField(blank=True, verbose_name='description')), + ('with_separator', models.BooleanField(default=False)), + ('background_color', models.CharField(blank=True, choices=[('black', 'black'), ('yellow', 'yellow'), ('red', 'red')], max_length=32, verbose_name='background color')), + ('page', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='page_blocks', to='pages.Page', verbose_name='page')), + ], + options={ + 'verbose_name': 'page block', + 'ordering': ('_order',), + 'verbose_name_plural': 'blocks', + }, + ), + 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')), + ('title', models.CharField(max_length=1024, verbose_name='title')), + ('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')), + ('type', models.CharField(blank=True, choices=[('logo', 'logo'), ('slider', 'slider'), ('card', 'card'), ('content', 'content')], max_length=64, verbose_name='type')), + ('page', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='page_images', to='pages.Page', verbose_name='page')), + ], + options={ + 'verbose_name': 'image', + 'ordering': ('_order',), + 'verbose_name_plural': 'images', }, ), migrations.AddField( diff --git a/app/organization/pages/models.py b/app/organization/pages/models.py index d6041086..a8643fa3 100644 --- a/app/organization/pages/models.py +++ b/app/organization/pages/models.py @@ -2,7 +2,33 @@ from django.db import models from django.utils.translation import ugettext_lazy as _ from django.core.urlresolvers import reverse, reverse_lazy from mezzanine.core.models import Displayable, Slugged, Orderable -from organization.core.models import DynamicContent +from organization.core.models import * + + +class CustomPage(Page, SubTitled, RichText): + + class Meta: + verbose_name = 'custom page' + + +class PageBlock(Block): + + page = models.ForeignKey(Page, verbose_name=_('page'), related_name='page_blocks', blank=True, null=True, on_delete=models.SET_NULL) + + class Meta: + verbose_name = _("block") + verbose_name_plural = _("blocks") + verbose_name = 'page block' + + +class PageImage(Image): + + page = models.ForeignKey(Page, verbose_name=_('page'), related_name='page_images', blank=True, null=True, on_delete=models.SET_NULL) + + class Meta: + verbose_name = _("image") + verbose_name_plural = _("images") + order_with_respect_to = "page" class DynamicContentHomeSlider(DynamicContent, Orderable): @@ -12,6 +38,7 @@ class DynamicContentHomeSlider(DynamicContent, Orderable): class Meta: verbose_name = 'Dynamic Content Home Slider' + class DynamicContentHomeBody(DynamicContent, Orderable): home = models.ForeignKey("home", verbose_name=_('home'), blank=True, null=True, on_delete=models.SET_NULL) @@ -19,7 +46,9 @@ class DynamicContentHomeBody(DynamicContent, Orderable): class Meta: verbose_name = 'Dynamic Content Home Body' + class Home(Displayable): class Meta: - verbose_name = 'Home' + verbose_name = _('home') + verbose_name_plural = _("homes") diff --git a/app/organization/pages/translation.py b/app/organization/pages/translation.py index 6b678991..396a6d8b 100644 --- a/app/organization/pages/translation.py +++ b/app/organization/pages/translation.py @@ -3,17 +3,38 @@ from mezzanine.pages.models import Page, RichText from mezzanine.pages.translation import TranslatedRichText from organization.pages.models import * + @register(Home) class HomeTranslationOptions(TranslationOptions): pass + @register(DynamicContentHomeSlider) class DynamicContentHomeSliderOptions(TranslationOptions): pass + @register(DynamicContentHomeBody) class DynamicContentHomeBodyOptions(TranslationOptions): pass + + +@register(CustomPage) +class CustomPageTranslationOptions(TranslationOptions): + + fields = ('sub_title', 'content') + + +@register(PageBlock) +class PageBlockTranslationOptions(TranslationOptions): + + fields = ('title', 'content') + + +@register(PageImage) +class PageImageTranslationOptions(TranslationOptions): + + fields = ('description',) diff --git a/app/organization/pages/views.py b/app/organization/pages/views.py index 54de21b0..60bd7bc3 100644 --- a/app/organization/pages/views.py +++ b/app/organization/pages/views.py @@ -3,7 +3,7 @@ from django.views.generic import DetailView, ListView, TemplateView from dal import autocomplete from dal_select2_queryset_sequence.views import Select2QuerySetSequenceView from mezzanine_agenda.models import Event -from organization.core.models import BasicPage +from organization.pages.models import CustomPage from organization.core.views import SlugMixin from organization.magazine.models import Article, Topic, Brief from organization.pages.models import Home @@ -29,15 +29,15 @@ class DynamicContentHomeSliderView(Select2QuerySetSequenceView): def get_queryset(self): articles = Article.objects.all() - basicpage = BasicPage.objects.all() + custompage = CustomPage.objects.all() events = Event.objects.all() if self.q: articles = articles.filter(title__icontains=self.q) - basicpage = basicpage.filter(title__icontains=self.q) + custompage = custompage.filter(title__icontains=self.q) events = events.filter(title__icontains=self.q) - qs = autocomplete.QuerySetSequence(articles, basicpage, events ) + qs = autocomplete.QuerySetSequence(articles, custompage, events ) if self.q: # This would apply the filter on all the querysets @@ -53,17 +53,17 @@ class DynamicContentHomeBodyView(Select2QuerySetSequenceView): def get_queryset(self): articles = Article.objects.all() - basicpage = BasicPage.objects.all() + custompage = CustomPage.objects.all() events = Event.objects.all() briefs = Brief.objects.all() if self.q: articles = articles.filter(title__icontains=self.q) - basicpage = basicpage.filter(title__icontains=self.q) + custompage = custompage.filter(title__icontains=self.q) events = events.filter(title__icontains=self.q) briefs = briefs.filter(title__icontains=self.q) - qs = autocomplete.QuerySetSequence(articles, basicpage, events, briefs) + qs = autocomplete.QuerySetSequence(articles, custompage, events, briefs) if self.q: # This would apply the filter on all the querysets diff --git a/app/organization/projects/admin.py b/app/organization/projects/admin.py index 890604bc..e9ce207b 100644 --- a/app/organization/projects/admin.py +++ b/app/organization/projects/admin.py @@ -6,21 +6,22 @@ from django.utils.translation import ugettext_lazy as _ from mezzanine.core.admin import * from organization.projects.models import * +from organization.pages.models import * class ProjectLinkInline(StackedDynamicInlineAdmin): - model = ProjectLink + model = DisplayableLink class ProjectImageInline(TabularDynamicInlineAdmin): - model = ProjectImage + model = DisplayableImage class ProjectBlockInline(StackedDynamicInlineAdmin): - model = ProjectBlock + model = DisplayableBlock class ProjectAdmin(admin.ModelAdmin): diff --git a/app/organization/projects/migrations/0001_initial.py b/app/organization/projects/migrations/0001_initial.py index e0503a10..0a6d4d66 100644 --- a/app/organization/projects/migrations/0001_initial.py +++ b/app/organization/projects/migrations/0001_initial.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.9.7 on 2016-08-23 12:25 +# Generated by Django 1.9.7 on 2016-08-23 17:45 from __future__ import unicode_literals from django.db import migrations, models @@ -12,33 +12,19 @@ class Migration(migrations.Migration): initial = True dependencies = [ + ('organization-core', '0001_initial'), ('organization-network', '0001_initial'), - ('sites', '0002_alter_domain_unique'), - ('organization-core', '0013_auto_20160823_1359'), ] operations = [ migrations.CreateModel( name='Project', fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('keywords_string', models.CharField(blank=True, editable=False, max_length=500)), - ('title', models.CharField(max_length=500, verbose_name='Title')), + ('customdisplayable_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='organization-core.CustomDisplayable')), ('title_fr', models.CharField(max_length=500, null=True, verbose_name='Title')), ('title_en', models.CharField(max_length=500, null=True, verbose_name='Title')), - ('slug', models.CharField(blank=True, help_text='Leave blank to have the URL auto-generated from the title.', max_length=2000, null=True, verbose_name='URL')), - ('_meta_title', models.CharField(blank=True, help_text='Optional title to be used in the HTML title tag. If left blank, the main title field will be used.', max_length=500, null=True, verbose_name='Title')), - ('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')), - ('gen_description', models.BooleanField(default=True, help_text='If checked, the description will be automatically generated from content. Uncheck if you want to manually set a custom description.', verbose_name='Generate description')), - ('created', models.DateTimeField(editable=False, null=True)), - ('updated', models.DateTimeField(editable=False, null=True)), - ('status', models.IntegerField(choices=[(1, 'Draft'), (2, 'Published')], default=2, help_text='With Draft chosen, will only be shown for admin users on the site.', verbose_name='Status')), - ('publish_date', models.DateTimeField(blank=True, db_index=True, help_text="With Published chosen, won't be shown until this time", null=True, verbose_name='Published from')), - ('expiry_date', models.DateTimeField(blank=True, help_text="With Published chosen, won't be shown after this time", null=True, verbose_name='Expires on')), - ('short_url', models.URLField(blank=True, null=True)), - ('in_sitemap', models.BooleanField(default=True, verbose_name='Show in sitemap')), ('content', mezzanine.core.fields.RichTextField(verbose_name='Content')), ('content_fr', mezzanine.core.fields.RichTextField(null=True, verbose_name='Content')), ('content_en', mezzanine.core.fields.RichTextField(null=True, verbose_name='Content')), @@ -48,61 +34,11 @@ class Migration(migrations.Migration): ('lead_team', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='leader_projects', to='organization-network.Team', verbose_name='lead team')), ('organizations', models.ManyToManyField(blank=True, to='organization-network.Organization', verbose_name='organizations')), ('persons', models.ManyToManyField(blank=True, to='organization-network.Person', verbose_name='persons')), - ('site', models.ForeignKey(editable=False, on_delete=django.db.models.deletion.CASCADE, to='sites.Site')), ('teams', models.ManyToManyField(blank=True, related_name='patner_projects', to='organization-network.Team', verbose_name='teams')), ], options={ 'verbose_name': 'project', }, - ), - migrations.CreateModel( - name='ProjectBlock', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('content', mezzanine.core.fields.RichTextField(verbose_name='Content')), - ('content_fr', mezzanine.core.fields.RichTextField(null=True, verbose_name='Content')), - ('content_en', mezzanine.core.fields.RichTextField(null=True, verbose_name='Content')), - ('_order', mezzanine.core.fields.OrderField(null=True, verbose_name='Order')), - ('title', models.CharField(max_length=1024, verbose_name='title')), - ('title_fr', models.CharField(max_length=1024, null=True, verbose_name='title')), - ('title_en', models.CharField(max_length=1024, null=True, verbose_name='title')), - ('description', models.TextField(blank=True, verbose_name='description')), - ('with_separator', models.BooleanField(default=False)), - ('background_color', models.CharField(blank=True, choices=[('black', 'black'), ('yellow', 'yellow'), ('red', 'red')], max_length=32, verbose_name='background color')), - ('project', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='blocks', to='organization-projects.Project', verbose_name='project')), - ], - options={ - 'ordering': ('_order',), - }, - ), - migrations.CreateModel( - name='ProjectImage', - 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')), - ('project', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='images', to='organization-projects.Project')), - ], - options={ - 'ordering': ('_order',), - }, - ), - migrations.CreateModel( - name='ProjectLink', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('url', models.URLField(verbose_name='URL')), - ('link_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='organization-core.LinkType', verbose_name='link type')), - ('project', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='links', to='organization-projects.Project')), - ], - options={ - 'verbose_name_plural': 'links', - 'abstract': False, - 'verbose_name': 'link', - }, + bases=('organization-core.customdisplayable', models.Model), ), ] diff --git a/app/organization/projects/models.py b/app/organization/projects/models.py index 36826646..4f590a59 100644 --- a/app/organization/projects/models.py +++ b/app/organization/projects/models.py @@ -6,9 +6,10 @@ from django.utils.translation import ugettext_lazy as _ from mezzanine.core.models import RichText, Displayable, Slugged, Orderable from organization.core.models import * +from organization.pages.models import * -class Project(Displayable, Period, RichText): +class Project(CustomDisplayable, Period, RichText): """(Project description)""" lead_team = models.ForeignKey('organization-network.Team', verbose_name=_('lead team'), related_name='leader_projects', blank=True, null=True) @@ -25,18 +26,3 @@ class Project(Displayable, Period, RichText): def get_absolute_url(self): return reverse("organization-project-detail", kwargs={"slug": self.slug}) - - -class ProjectBlock(Block): - - project = models.ForeignKey(Project, verbose_name=_('project'), related_name='blocks', blank=True, null=True, on_delete=models.SET_NULL) - - -class ProjectImage(Image): - - project = models.ForeignKey(Project, related_name='images') - - -class ProjectLink(Link): - - project = models.ForeignKey(Project, related_name='links') diff --git a/app/organization/projects/translation.py b/app/organization/projects/translation.py index b5bc433e..cc687455 100644 --- a/app/organization/projects/translation.py +++ b/app/organization/projects/translation.py @@ -7,20 +7,3 @@ from organization.projects.models import * class ProjectTranslationOptions(TranslationOptions): fields = ('title', 'description', 'content') - - -@register(ProjectImage) -class ProjectImageTranslationOptions(TranslationOptions): - - fields = ('description',) - - -@register(ProjectLink) -class ProjectLinkTranslationOptions(TranslationOptions): - pass - - -@register(ProjectBlock) -class ProjectBlockTranslationOptions(TranslationOptions): - - fields = ('title', 'content', ) diff --git a/app/templates/pages/basicpage.html b/app/templates/pages/basicpage.html index 7eefe816..2710b00b 100644 --- a/app/templates/pages/basicpage.html +++ b/app/templates/pages/basicpage.html @@ -16,29 +16,29 @@ {% endmetablock %}{% endblock %} {% block page_class %} - basicpage + custompage {% endblock %} {% block page_title %} - {% editable page.basicpage.title %} -

{{ page.basicpage.title }}

+ {% editable page.custompage.title %} +

{{ page.custompage.title }}

{% endeditable %} {% endblock %} {% block page_content %} - {% if page.basicpage.sub_title %} - {% editable page.basicpage.sub_title %} + {% if page.custompage.sub_title %} + {% editable page.custompage.sub_title %}
- {{ page.basicpage.sub_title }} + {{ page.custompage.sub_title }}
{% endeditable %} {% endif %} - {% editable page.basicpage.content %} - {{ page.basicpage.content|richtext_filters|safe }} + {% editable page.custompage.content %} + {{ page.custompage.content|richtext_filters|safe }} {% endeditable %} {% if page.get_ascendants|length == 1 %} @@ -57,13 +57,13 @@ {% endblock %} {% block page_sub_content %} - {% if page.basicpage.pageblock_set.all %} + {% if page.custompage.pageblock_set.all %}

- {% for pageblock in page.basicpage.pageblock_set.all %} + {% for pageblock in page.custompage.pageblock_set.all %}
{% if not forloop.first and pageblock.with_separator %} diff --git a/app/templates/pages/departmentpage.html b/app/templates/pages/departmentpage.html index b59643d9..7d399fee 100644 --- a/app/templates/pages/departmentpage.html +++ b/app/templates/pages/departmentpage.html @@ -1,4 +1,4 @@ -{% extends "pages/basicpage.html" %} +{% extends "pages/custompage.html" %} {% load i18n mezzanine_tags keyword_tags pages_tags organization_tags %} {% block meta_title %}{{ page.meta_title }}{% endblock %} diff --git a/app/templates/pages/teampage.html b/app/templates/pages/teampage.html index 3b0f989d..8d9d6196 100644 --- a/app/templates/pages/teampage.html +++ b/app/templates/pages/teampage.html @@ -1,4 +1,4 @@ -{% extends "pages/basicpage.html" %} +{% extends "pages/custompage.html" %} {% load i18n mezzanine_tags keyword_tags pages_tags organization_tags %} {% block meta_title %}{{ page.meta_title }}{% endblock %}