return self.url
-
class Period(models.Model):
date_begin = models.DateField(_('begin date'), null=True, blank=True)
abstract = True
-
class CustomDisplayable(Displayable):
class Meta:
order_with_respect_to = "displayable"
-
class CustomModel(models.Model):
class Meta:
--- /dev/null
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.10 on 2016-08-26 15:08
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('organization-magazine', '0010_auto_20160825_1843'),
+ ]
+
+ operations = [
+ migrations.AlterField(
+ model_name='article',
+ name='topics',
+ field=models.ManyToManyField(blank=True, related_name='articles', to='organization-magazine.Topic', verbose_name='topics'),
+ ),
+ ]
related_articles = models.ManyToManyField("self",
verbose_name=_("Related articles"), blank=True)
department = models.ForeignKey(Department, verbose_name=_('department'), related_name='articles', limit_choices_to=dict(id__in=Department.objects.all()), blank=True, null=True, on_delete=models.SET_NULL)
- topics = models.ManyToManyField("Topic", verbose_name=_('topics'), related_name="articles", blank=True, null=True)
+ topics = models.ManyToManyField("Topic", verbose_name=_('topics'), related_name="articles", blank=True)
def get_absolute_url(self):
return reverse("magazine-article-detail", kwargs={"slug": self.slug})
--- /dev/null
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.10 on 2016-08-26 16:05
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('organization-core', '0003_auto_20160825_1232'),
+ ('organization-media', '0001_initial'),
+ ]
+
+ operations = [
+ migrations.RemoveField(
+ model_name='audio',
+ name='_meta_title',
+ ),
+ migrations.RemoveField(
+ model_name='audio',
+ name='created',
+ ),
+ migrations.RemoveField(
+ model_name='audio',
+ name='description',
+ ),
+ migrations.RemoveField(
+ model_name='audio',
+ name='expiry_date',
+ ),
+ migrations.RemoveField(
+ model_name='audio',
+ name='gen_description',
+ ),
+ migrations.RemoveField(
+ model_name='audio',
+ name='id',
+ ),
+ migrations.RemoveField(
+ model_name='audio',
+ name='in_sitemap',
+ ),
+ migrations.RemoveField(
+ model_name='audio',
+ name='keywords_string',
+ ),
+ migrations.RemoveField(
+ model_name='audio',
+ name='publish_date',
+ ),
+ migrations.RemoveField(
+ model_name='audio',
+ name='short_url',
+ ),
+ migrations.RemoveField(
+ model_name='audio',
+ name='site',
+ ),
+ migrations.RemoveField(
+ model_name='audio',
+ name='slug',
+ ),
+ migrations.RemoveField(
+ model_name='audio',
+ name='status',
+ ),
+ migrations.RemoveField(
+ model_name='audio',
+ name='title',
+ ),
+ migrations.RemoveField(
+ model_name='audio',
+ name='updated',
+ ),
+ migrations.RemoveField(
+ model_name='video',
+ name='_meta_title',
+ ),
+ migrations.RemoveField(
+ model_name='video',
+ name='created',
+ ),
+ migrations.RemoveField(
+ model_name='video',
+ name='description',
+ ),
+ migrations.RemoveField(
+ model_name='video',
+ name='expiry_date',
+ ),
+ migrations.RemoveField(
+ model_name='video',
+ name='gen_description',
+ ),
+ migrations.RemoveField(
+ model_name='video',
+ name='id',
+ ),
+ migrations.RemoveField(
+ model_name='video',
+ name='in_sitemap',
+ ),
+ migrations.RemoveField(
+ model_name='video',
+ name='keywords_string',
+ ),
+ migrations.RemoveField(
+ model_name='video',
+ name='publish_date',
+ ),
+ migrations.RemoveField(
+ model_name='video',
+ name='short_url',
+ ),
+ migrations.RemoveField(
+ model_name='video',
+ name='site',
+ ),
+ migrations.RemoveField(
+ model_name='video',
+ name='slug',
+ ),
+ migrations.RemoveField(
+ model_name='video',
+ name='status',
+ ),
+ migrations.RemoveField(
+ model_name='video',
+ name='title',
+ ),
+ migrations.RemoveField(
+ model_name='video',
+ name='updated',
+ ),
+ migrations.AddField(
+ model_name='audio',
+ name='customdisplayable_ptr',
+ field=models.OneToOneField(auto_created=True, default=1, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='organization-core.CustomDisplayable'),
+ preserve_default=False,
+ ),
+ migrations.AddField(
+ model_name='video',
+ name='customdisplayable_ptr',
+ field=models.OneToOneField(auto_created=True, default=1, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='organization-core.CustomDisplayable'),
+ preserve_default=False,
+ ),
+ ]
--- /dev/null
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.10 on 2016-08-26 16:06
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('pages', '0004_auto_20160804_1547'),
+ ('organization-media', '0002_auto_20160826_1805'),
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='PageAudio',
+ 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')),
+ ('page', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='audios', to='pages.Page', verbose_name='page')),
+ ],
+ options={
+ 'verbose_name_plural': 'audios',
+ 'verbose_name': 'audio',
+ },
+ bases=('organization-media.audio',),
+ ),
+ migrations.CreateModel(
+ name='PageVideo',
+ 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')),
+ ('page', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='videos', to='pages.Page', verbose_name='page')),
+ ],
+ options={
+ 'verbose_name_plural': 'videos',
+ 'verbose_name': 'video',
+ },
+ bases=('organization-media.video',),
+ ),
+ migrations.AlterOrderWithRespectTo(
+ name='pagevideo',
+ order_with_respect_to='page',
+ ),
+ migrations.AlterOrderWithRespectTo(
+ name='pageaudio',
+ order_with_respect_to='page',
+ ),
+ ]
from __future__ import unicode_literals
+from pyquery import PyQuery as pq
+
from django.db import models
from django.utils.translation import ugettext_lazy as _
from mezzanine.core.models import RichText, Displayable, Slugged
from mezzanine.core.fields import RichTextField, OrderField, FileField
from mezzanine.utils.models import AdminThumbMixin, upload_to
-
+from organization.core.models import CustomDisplayable
+from organization.pages.models import Page
from mezzanine_agenda.models import Event
from django.conf import settings
MEDIA_BASE_URL = getattr(settings, 'MEDIA_BASE_URL', 'http://medias.ircam.fr/embed/media/')
-class Media(Displayable, RichText):
+class Media(CustomDisplayable, RichText):
"""Media"""
media_id = models.CharField(_('media id'), max_length=128)
return reverse("festival-video-detail", kwargs={"slug": self.slug})
+class PageAudio(Audio):
+
+ page = models.ForeignKey(Page, verbose_name=_('page'), related_name='audios', blank=True, null=True, on_delete=models.SET_NULL)
+
+ class Meta:
+ verbose_name = _("audio")
+ verbose_name_plural = _("audios")
+ order_with_respect_to = "page"
+
+
class Video(Media):
"""Video"""
return reverse("festival-video-detail", kwargs={"slug": self.slug})
+class PageVideo(Video):
+
+ page = models.ForeignKey(Page, verbose_name=_('page'), related_name='videos', blank=True, null=True, on_delete=models.SET_NULL)
+
+ class Meta:
+ verbose_name = _("video")
+ verbose_name_plural = _("videos")
+ order_with_respect_to = "page"
+
+
class VideoCategory(Slugged):
"""Video Category"""
class AudioTranslationOptions(TranslationOptions):
fields = ('title', 'description', 'content')
+
+
+@register(PageVideo)
+class PageVideoTranslationOptions(TranslationOptions):
+
+ pass
+
+@register(PageAudio)
+class PageAudioTranslationOptions(TranslationOptions):
+
+ pass
from organization.network.models import *
from organization.pages.models import *
from organization.core.admin import *
+from organization.media.models import PageAudio, PageVideo
+
+
+class PageAudioInline(StackedDynamicInlineAdmin):
+
+ model = PageAudio
+
+
+class PageVideoInline(StackedDynamicInlineAdmin):
+
+ model = PageVideo
class OrganizationImageInline(TabularDynamicInlineAdmin):
class DepartmentPageAdmin(PageAdmin):
- inlines = [DepartmentPageImageInline, DepartmentPageBlockInline]
+ inlines = [DepartmentPageImageInline, DepartmentPageBlockInline, PageAudioInline, PageVideoInline, ]
class DepartmentAdmin(BaseTranslationModelAdmin):
class TeamPageAdmin(PageAdmin):
- inlines = [TeamPageImageInline, TeamPageBlockInline]
+ inlines = [TeamPageImageInline, TeamPageBlockInline, PageAudioInline, PageVideoInline, ]
class PersonAdminBase(BaseTranslationModelAdmin):
from organization.pages.models import *
from organization.pages.models import DynamicContentHomeSlider, DynamicContentHomeBody, Home
from organization.pages.forms import DynamicContentHomeSliderForm, DynamicContentHomeBodyForm
-
+from organization.media.models import PageAudio, PageVideo
class PageBlockInline(StackedDynamicInlineAdmin):
model = PageImage
+class PageAudioInline(StackedDynamicInlineAdmin):
+
+ model = PageAudio
+
+
+class PageVideoInline(StackedDynamicInlineAdmin):
+
+ model = PageVideo
+
+
class CustomPageAdmin(PageAdmin):
- inlines = [PageBlockInline, PageImageInline]
+ inlines = [PageBlockInline, PageImageInline, PageAudioInline, PageVideoInline, ]
class DynamicContentHomeSliderInline(TabularDynamicInlineAdmin):
from organization.projects.models import *
from organization.pages.models import *
-
+from organization.media.models import Video, Audio
class ProjectLinkInline(StackedDynamicInlineAdmin):
model = DisplayableBlock
+class ProjectAudioInline(StackedDynamicInlineAdmin):
+
+ model = Audio
+
+
+class ProjectVideoInline(StackedDynamicInlineAdmin):
+
+ model = Video
+
+
class ProjectAdmin(admin.ModelAdmin):
model = Project
class ProjectAdminDisplayable(DisplayableAdmin):
fieldsets = deepcopy(ProjectAdmin.fieldsets)
- inlines = [ProjectImageInline, ProjectBlockInline, ProjectLinkInline, ]
+ inlines = [ProjectImageInline, ProjectBlockInline, ProjectAudioInline, ProjectVideoInline]
filter_horizontal = ['persons', 'teams', 'organizations']