X-Git-Url: https://git.0d.be/?p=django-panik-combo.git;a=blobdiff_plain;f=panikombo%2Fmodels.py;h=350f77e609fe11a3894a502929daede0bc985178;hp=38da84bea11e46c1ed284885b55b0470e08340bc;hb=a53294a17b610fa38589d1ebe223ddad42d07f11;hpb=bf4d3f5d98068d78631ea471a51e1b90054c6e6b diff --git a/panikombo/models.py b/panikombo/models.py index 38da84b..350f77e 100644 --- a/panikombo/models.py +++ b/panikombo/models.py @@ -6,7 +6,9 @@ from django.db import models from django.utils.translation import ugettext_lazy as _ from ckeditor.fields import RichTextField +from taggit.models import Tag from taggit.managers import TaggableManager +from taggit.utils import parse_tags from combo.data.models import CellBase from combo.data.library import register_cell_class @@ -80,10 +82,16 @@ class EpisodeCell(CellBase): return '' +def get_parsed_tags(tagstring): + tags = parse_tags(tagstring) + return [x for x in Tag.objects.filter(name__in=tags)] + + @register_cell_class class EpisodeAutoSelectionCell(CellBase): title = models.CharField(_('Title'), max_length=50, blank=True) tags = TaggableManager(_('Tags'), blank=True) + and_tags = models.CharField(_('And Tags'), max_length=100, blank=True) category = models.ForeignKey('emissions.Category', null=True, blank=True) period = models.PositiveSmallIntegerField( _('Period'), default=0, @@ -101,6 +109,9 @@ class EpisodeAutoSelectionCell(CellBase): 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.and_tags: + and_tags = get_parsed_tags(self.and_tags) + episodes_queryset = episodes_queryset.filter(tags__in=and_tags) if self.period == 0: episodes_queryset = episodes_queryset.extra( @@ -114,16 +125,16 @@ class EpisodeAutoSelectionCell(CellBase): 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)'''], + WHERE episode_id = emissions_episode.id) AND + 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)'''], + WHERE episode_id = emissions_episode.id) AND + datetime < CURRENT_TIMESTAMP'''], tables=['emissions_diffusion']) return episodes_queryset @@ -132,9 +143,12 @@ class EpisodeAutoSelectionCell(CellBase): tmpl = template.loader.get_template('panikombo/episode_auto_selection.html') context['title'] = self.title - episodes_queryset = self.get_included_items() - episodes_queryset = episodes_queryset.order_by('-first_diffusion').distinct() - context['episodes'] = episodes_queryset + if (self.category or self.period or self.tags.count()): + episodes_queryset = self.get_included_items() + episodes_queryset = episodes_queryset.order_by('-first_diffusion').distinct() + context['episodes'] = episodes_queryset + else: + context['episodes'] = [] return tmpl.render(context) def get_default_form_class(self): @@ -150,6 +164,7 @@ class EpisodeAutoSelectionCell(CellBase): class NewsItemAutoSelectionCell(CellBase): title = models.CharField(_('Title'), max_length=50, blank=True) tags = TaggableManager(_('Tags'), blank=True) + and_tags = models.CharField(_('And Tags'), max_length=100, blank=True) future = models.BooleanField(_('Future Events Only'), default=True) category = models.ForeignKey('emissions.NewsCategory', verbose_name=_('Category'), null=True, blank=True) @@ -161,6 +176,9 @@ class NewsItemAutoSelectionCell(CellBase): newsitems_queryset = NewsItem.objects.select_related() if self.tags.count(): newsitems_queryset = newsitems_queryset.filter(tags__in=self.tags.all()) + if self.and_tags: + and_tags = get_parsed_tags(self.and_tags) + newsitems_queryset = newsitems_queryset.filter(tags__in=and_tags) if self.future: newsitems_queryset = newsitems_queryset.filter(event_date__gte=date.today()) if self.category: @@ -171,7 +189,10 @@ class NewsItemAutoSelectionCell(CellBase): def render(self, context): tmpl = template.loader.get_template('panikombo/newsitem_auto_selection.html') context['title'] = self.title - context['newsitems'] = self.get_included_items() + if self.tags.count() or self.future or self.category: + context['newsitems'] = self.get_included_items() + else: + context['newsitems'] = [] return tmpl.render(context) def get_default_form_class(self):