]> git.0d.be Git - django-panik-combo.git/blobdiff - panikombo/models.py
add support for backlinking topiks
[django-panik-combo.git] / panikombo / models.py
index 4f9baeb71bcfbe2ee6d46841cf3d42d7d752e8d9..102a5ed9799511f56916539e6996741b2a4ab21b 100644 (file)
@@ -28,6 +28,11 @@ class SoundCell(CellBase):
         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:
@@ -56,6 +61,11 @@ class EpisodeCell(CellBase):
         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
@@ -77,16 +87,19 @@ class EpisodeAutoSelectionCell(CellBase):
     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',
                         },
@@ -117,17 +130,18 @@ class NewsItemAutoSelectionCell(CellBase):
     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):
@@ -152,3 +166,12 @@ class Topik(models.Model):
     # 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)