title = models.CharField(_('Title'), max_length=50, blank=True)
tags = TaggableManager(_('Tags'), blank=True)
category = models.ForeignKey('emissions.Category', null=True, blank=True)
+ period = models.PositiveSmallIntegerField(
+ _('Period'), default=0,
+ choices=((0, _('All')),
+ (1, _('Future')),
+ (2, _('Past'))))
+
class Meta:
verbose_name = _('Automatic Episode Selection')
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())
+
+ if self.period == 0:
+ episodes_queryset = episodes_queryset.extra(
+ select={ 'first_diffusion': 'emissions_diffusion.datetime', },
+ select_params=(False, True),
+ where=['''datetime = (SELECT MIN(datetime) FROM emissions_diffusion
+ WHERE episode_id = emissions_episode.id)'''],
+ tables=['emissions_diffusion'])
+ elif self.period == 1:
+ episodes_queryset = episodes_queryset.extra(
+ select={ 'first_diffusion': 'emissions_diffusion.datetime', },
+ select_params=(False, True),
+ where=['''datetime = (SELECT MIN(datetime) FROM emissions_diffusion
+ WHERE episode_id = emissions_episode.id AND
+ emissions_diffusion.datetime >= CURRENT_TIMESTAMP)'''],
+ tables=['emissions_diffusion'])
+ elif self.period == 2:
+ episodes_queryset = episodes_queryset.extra(
+ select={ 'first_diffusion': 'emissions_diffusion.datetime', },
+ select_params=(False, True),
+ where=['''datetime = (SELECT MIN(datetime) FROM emissions_diffusion
+ WHERE episode_id = emissions_episode.id AND
+ emissions_diffusion.datetime < CURRENT_TIMESTAMP)'''],
+ tables=['emissions_diffusion'])
+
return episodes_queryset
def render(self, context):
context['title'] = self.title
episodes_queryset = self.get_included_items()
- episodes_queryset = episodes_queryset.extra(select={
- 'first_diffusion': 'emissions_diffusion.datetime',
- },
- select_params=(False, True),
- where=['''datetime = (SELECT MIN(datetime)
- FROM emissions_diffusion
- WHERE episode_id = emissions_episode.id)'''],
- tables=['emissions_diffusion'],
- ).order_by('-first_diffusion').distinct()
+ episodes_queryset = episodes_queryset.order_by('-first_diffusion').distinct()
context['episodes'] = episodes_queryset
return tmpl.render(context)