From: Emilie Date: Fri, 2 Sep 2016 10:08:07 +0000 (+0200) Subject: Person : adding Image, Video, Audio, Activity, Link | Network : admin refacto X-Git-Url: https://git.parisson.com/?a=commitdiff_plain;h=f38a5afb27186a25d668286743d4fa4f4c276fa6;p=mezzo.git Person : adding Image, Video, Audio, Activity, Link | Network : admin refacto --- diff --git a/app/organization/media/admin.py b/app/organization/media/admin.py index 5fac8189..a835c8af 100644 --- a/app/organization/media/admin.py +++ b/app/organization/media/admin.py @@ -14,7 +14,6 @@ class AudioAdmin(admin.ModelAdmin): model = Audio - class PlaylistAdmin(admin.ModelAdmin): model = Playlist diff --git a/app/organization/network/admin.py b/app/organization/network/admin.py index 9675c1e4..fb2ff1ee 100644 --- a/app/organization/network/admin.py +++ b/app/organization/network/admin.py @@ -7,96 +7,75 @@ from mezzanine.pages.admin import PageAdmin from organization.network.models import * from organization.pages.models import * from organization.core.admin import * -from organization.pages.models import PageAudio, PageVideo +from organization.pages.admin import PageImageInline, PageBlockInline, PageAudioInline, PageVideoInline -class PageAudioInline(StackedDynamicInlineAdmin): - - model = PageAudio - exclude = ("short_url", "keywords", "description", "slug", ) - - -class PageVideoInline(StackedDynamicInlineAdmin): - - model = PageVideo - exclude = ("short_url", "keywords", "description", "slug", ) - - -# class OrganizationImageInline(TabularDynamicInlineAdmin): -# -# model = ModelImage -# - class OrganizationAdmin(BaseTranslationModelAdmin): model = Organization - # inlines = [OrganizationImageInline,] + #inlines = [OrganizationImageInline,] -class DepartmentPageBlockInline(StackedDynamicInlineAdmin): +class DepartmentPageAdmin(PageAdmin): - model = PageBlock + inlines = [PageImageInline, PageBlockInline, PageAudioInline, PageVideoInline, ] -class DepartmentPageImageInline(TabularDynamicInlineAdmin): +class DepartmentAdmin(BaseTranslationModelAdmin): - model = PageImage + model = Department -class DepartmentPageAdmin(PageAdmin): +class TeamAdmin(BaseTranslationModelAdmin): - inlines = [DepartmentPageImageInline, DepartmentPageBlockInline, PageAudioInline, PageVideoInline, ] + model = Team -class DepartmentAdmin(BaseTranslationModelAdmin): +class TeamPageAdmin(PageAdmin): - model = Department + inlines = [PageImageInline, PageBlockInline, PageAudioInline, PageVideoInline, ] -class TeamAdmin(BaseTranslationModelAdmin): +class PersonAdminBase(BaseTranslationModelAdmin): - model = Team + model = Person -class TeamPageImageInline(TabularDynamicInlineAdmin): +class PersonActivityInline(StackedDynamicInlineAdmin): - model = PageImage + model = PersonActivity + fk_name = 'person' -class TeamPageBlockInline(StackedDynamicInlineAdmin): - model = PageBlock +class PersonAudioInline(StackedDynamicInlineAdmin): + model = PersonAudio -class TeamPageAdmin(PageAdmin): - inlines = [TeamPageImageInline, TeamPageBlockInline, PageAudioInline, PageVideoInline, ] +class PersonVideoInline(StackedDynamicInlineAdmin): + model = PersonVideo -class PersonAdminBase(BaseTranslationModelAdmin): - model = Person +class PersonLinkInline(StackedDynamicInlineAdmin): + model = PersonLink -# class PersonLinkInline(StackedDynamicInlineAdmin): -# -# model = DisplayableLink +class PersonImageInline(TabularDynamicInlineAdmin): -class PersonActivityInline(StackedDynamicInlineAdmin): + model = PersonImage - model = PersonActivity - fk_name = 'person' +class PersonBlockInline(StackedDynamicInlineAdmin): + + model = PersonBlock -# class PersonImageInline(TabularDynamicInlineAdmin): -# -# model = DisplayableImage -# class PersonAdmin(BaseTranslationModelAdmin): model = Person - # inlines = [PersonImageInline, PersonActivityInline, PersonLinkInline, ] + inlines = [PersonActivityInline, PersonAudioInline, PersonImageInline, PersonVideoInline, PersonBlockInline, PersonLinkInline ] first_fields = ['last_name', 'first_name', 'title', 'gender', 'user'] def get_fieldsets(self, request, obj = None): diff --git a/app/organization/network/migrations/0003_personaudio_personblock_personimage_personlink_personvideo.py b/app/organization/network/migrations/0003_personaudio_personblock_personimage_personlink_personvideo.py new file mode 100644 index 00000000..6591be31 --- /dev/null +++ b/app/organization/network/migrations/0003_personaudio_personblock_personimage_personlink_personvideo.py @@ -0,0 +1,87 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.7 on 2016-09-02 09:54 +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-media', '0001_initial'), + ('organization-core', '0001_initial'), + ('organization-network', '0002_auto_20160901_1737'), + ] + + operations = [ + migrations.CreateModel( + name='PersonAudio', + fields=[ + ('audio_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='organization-media.Audio')), + ('project', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='audios', to='organization-network.Person', verbose_name='project')), + ], + options={ + 'abstract': False, + }, + bases=('organization-media.audio',), + ), + migrations.CreateModel( + name='PersonBlock', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('content', mezzanine.core.fields.RichTextField(verbose_name='Content')), + ('_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')), + ('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-network.Person', verbose_name='project')), + ], + options={ + 'ordering': ('_order',), + }, + ), + migrations.CreateModel( + name='PersonImage', + 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')), + ('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(choices=[('logo', 'logo'), ('slider', 'slider'), ('card', 'card'), ('page_slider', 'page slider')], max_length=64, verbose_name='type')), + ('project', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='images', to='organization-network.Person', verbose_name='project')), + ], + options={ + 'ordering': ('_order',), + }, + ), + migrations.CreateModel( + name='PersonLink', + 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')), + ('project', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='links', to='organization-network.Person', verbose_name='project')), + ], + options={ + 'verbose_name_plural': 'links', + 'verbose_name': 'link', + 'abstract': False, + }, + ), + migrations.CreateModel( + name='PersonVideo', + fields=[ + ('video_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='organization-media.Video')), + ('project', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='videos', to='organization-network.Person', verbose_name='project')), + ], + options={ + 'abstract': False, + }, + bases=('organization-media.video',), + ), + ] diff --git a/app/organization/network/models.py b/app/organization/network/models.py index 83096971..1dc688d5 100644 --- a/app/organization/network/models.py +++ b/app/organization/network/models.py @@ -21,6 +21,7 @@ from mezzanine.core.fields import RichTextField, OrderField, FileField from mezzanine.utils.models import AdminThumbMixin, upload_to from organization.core.models import * +from organization.media.models import * from django_countries.fields import CountryField # from .nationalities.fields import NationalityField @@ -179,6 +180,30 @@ class Person(Displayable, AdminThumbMixin): super(Person, self).save(*args, **kwargs) +class PersonAudio(Audio): + + project = models.ForeignKey(Person, verbose_name=_('project'), related_name='audios', blank=True, null=True, on_delete=models.SET_NULL) + + +class PersonVideo(Video): + + project = models.ForeignKey(Person, verbose_name=_('project'), related_name='videos', blank=True, null=True, on_delete=models.SET_NULL) + + +class PersonLink(Link): + + project = models.ForeignKey(Person, verbose_name=_('project'), related_name='links', blank=True, null=True, on_delete=models.SET_NULL) + + +class PersonImage(Image): + + project = models.ForeignKey(Person, verbose_name=_('project'), related_name='images', blank=True, null=True, on_delete=models.SET_NULL) + + +class PersonBlock(Block): + + project = models.ForeignKey(Person, verbose_name=_('project'), related_name='blocks', blank=True, null=True, on_delete=models.SET_NULL) + class ActivityStatus(Named): diff --git a/app/organization/network/translation.py b/app/organization/network/translation.py index 50280d97..9bd85d7c 100644 --- a/app/organization/network/translation.py +++ b/app/organization/network/translation.py @@ -43,3 +43,33 @@ class PersonTranslationOptions(TranslationOptions): class PersonActivityTranslationOptions(TranslationOptions): fields = ('description', 'content') + + +@register(PersonAudio) +class PersonAudioTranslationOptions(TranslationOptions): + + pass + + +@register(PersonVideo) +class PersonVideoTranslationOptions(TranslationOptions): + + pass + + +@register(PersonLink) +class PersonLinkTranslationOptions(TranslationOptions): + + pass + + +@register(PersonImage) +class PersonImageTranslationOptions(TranslationOptions): + + pass + + +@register(PersonBlock) +class PersonBlockTranslationOptions(TranslationOptions): + + pass