limit_to_focus = models.BooleanField(_('Limit to focused elements'), default=False)
sound_format = models.ForeignKey('emissions.Format',
verbose_name=_('Limit to format'), null=True, blank=True)
+ tags = TaggableManager(_('Tags'), blank=True)
minimal_duration = models.PositiveIntegerField(
_('Minimal duration (in minutes)'),
default=None, blank=True, null=True)
class Meta:
verbose_name = _('Sounds')
+ def get_default_form_fields(self):
+ fields = super().get_default_form_fields()
+ fields.insert(fields.index('minimal_duration'), 'tags')
+ return fields
+
def get_cell_extra_context(self, context):
soundfiles = SoundFile.objects.prefetch_related('episode__emission__categories')
soundfiles = soundfiles.filter(podcastable=True)
soundfiles = soundfiles.filter(duration__gte=self.minimal_duration * 60)
if self.maximal_duration:
soundfiles = soundfiles.filter(duration__lte=self.maximal_duration * 60)
+ if self.tags.exists():
+ soundfiles = soundfiles.filter(episode__tags__in=self.tags.all())
soundfiles = soundfiles.select_related().extra(
select={'first_diffusion': 'emissions_diffusion.datetime', },
select_params=(False, True),