--- /dev/null
+from django.core.management.base import BaseCommand, CommandError
+
+from emissions.models import NewsItem, Episode
+
+from combo.data.models import CellBase
+from panikombo.models import Topik, ItemTopik
+
+class Command(BaseCommand):
+ def handle(self, *args, **kwargs):
+ remaining_item_topik = set(ItemTopik.objects.all())
+ for topik in Topik.objects.all():
+ cells = CellBase.get_cells(page=topik.page)
+ for cell in cells:
+ if not hasattr(cell, 'get_included_items'):
+ continue
+ for item in cell.get_included_items():
+ kwargs = {'topik': topik}
+ if isinstance(item, NewsItem):
+ kwargs['newsitem'] = item
+ elif isinstance(item, Episode):
+ kwargs['episode'] = item
+ else:
+ continue
+ obj, created = ItemTopik.objects.get_or_create(**kwargs)
+ if obj in remaining_item_topik:
+ remaining_item_topik.remove(obj)
+ for item_topik in remaining_item_topik:
+ item_topik.delete()
--- /dev/null
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
+
+from django.db import models, migrations
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('emissions', '0004_focus_page'),
+ ('panikombo', '0005_topik'),
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='ItemTopik',
+ fields=[
+ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
+ ('episode', models.ForeignKey(verbose_name='Episode', blank=True, to='emissions.Episode', null=True)),
+ ('newsitem', models.ForeignKey(verbose_name='News Item', blank=True, to='emissions.NewsItem', null=True)),
+ ('topik', models.ForeignKey(verbose_name=b'Topik', blank=True, to='panikombo.Topik', null=True)),
+ ],
+ options={
+ },
+ bases=(models.Model,),
+ ),
+ ]
from .forms import SoundCellForm
return SoundCellForm
+ def get_included_items(self):
+ if not self.soundfile:
+ return []
+ return [self.soundfile.episode]
+
def get_additional_label(self):
if self.soundfile:
if self.soundfile.fragment:
context['soundfile'] = self.episode.main_sound
return tmpl.render(context)
+ def get_included_items(self):
+ if not self.episode:
+ return []
+ return [self.episode]
+
def get_default_form_class(self):
from .forms import EpisodeCellForm
return EpisodeCellForm
class Meta:
verbose_name = _('Automatic Episode Selection')
- def render(self, context):
- tmpl = template.loader.get_template('panikombo/episode_auto_selection.html')
- context['title'] = self.title
-
+ def get_included_items(self):
episodes_queryset = Episode.objects.select_related()
if self.category:
episodes_queryset = episodes_queryset.filter(emission__categories__in=[self.category.id])
if self.tags.count():
episodes_queryset = episodes_queryset.filter(tags__in=self.tags.all())
+ return episodes_queryset
+
+ def render(self, context):
+ tmpl = template.loader.get_template('panikombo/episode_auto_selection.html')
+ context['title'] = self.title
+ episodes_queryset = self.get_included_items()
episodes_queryset = episodes_queryset.extra(select={
'first_diffusion': 'emissions_diffusion.datetime',
},
class Meta:
verbose_name = _('Automatic Newsitem Selection')
- def render(self, context):
- tmpl = template.loader.get_template('panikombo/newsitem_auto_selection.html')
- context['title'] = self.title
-
+ def get_included_items(self):
newsitems_queryset = NewsItem.objects.select_related()
if self.tags.count():
newsitems_queryset = newsitems_queryset.filter(tags__in=self.tags.all())
if self.future:
newsitems_queryset = newsitems_queryset.filter(event_date__gte=date.today())
+ return newsitems_queryset
- context['newsitems'] = newsitems_queryset
+ def render(self, context):
+ tmpl = template.loader.get_template('panikombo/newsitem_auto_selection.html')
+ context['title'] = self.title
+ context['newsitems'] = self.get_included_items()
return tmpl.render(context)
def get_default_form_class(self):
# denormalized from Focus
got_focus = models.DateTimeField(default=None, null=True, blank=True)
has_focus = models.BooleanField(default=False)
+
+
+class ItemTopik(models.Model):
+ newsitem = models.ForeignKey('emissions.NewsItem', verbose_name=_('News Item'),
+ null=True, blank=True)
+ episode = models.ForeignKey('emissions.Episode', verbose_name=_('Episode'),
+ null=True, blank=True)
+ topik = models.ForeignKey('Topik', verbose_name='Topik',
+ null=True, blank=True)