diff --git a/newsbox/models.py b/newsbox/models.py index 59d62e2dabe987ef0cf7583f86fc9084a435f53c..7912b8caa5e70adeecc997505664b10e62e9d2a9 100644 --- a/newsbox/models.py +++ b/newsbox/models.py @@ -45,22 +45,24 @@ class NewsboxManager(models.Manager): Filter published news """ - def published(self): + @classmethod + def q_published(cls): now = datetime.utcnow().replace(tzinfo=utc) - query_set = super(NewsboxManager, self).get_query_set().filter( - # Only published News - models.Q(newsbox_published=True), - ).exclude( - # exclude news with publication start date in the future - models.Q(newsbox_publication_start_date__gt=now) - ) - - if issubclass(self.model, NewsboxExpiredBase): - query_set = query_set.exclude( - # exclude news which are obsolete - models.Q(newsbox_publication_end_date__lte=now) + # Only published News + q = models.Q(newsbox_published=True) + # exclude news with publication start date in the future + q &= ~models.Q(newsbox_publication_start_date__gt=now) + if issubclass(cls, NewsboxExpiredBase): + # exclude news which are obsolete + q &= ~( + models.Q(newsbox_publication_end_date__lte=now) | + models.Q(newsbox_publication_end_date__isnull=True) ) - return query_set + return q + + def published(self): + q = self.q_published() + return super(NewsboxManager, self).get_queryset().filter(q) class NewsboxModelBase(models.base.ModelBase): diff --git a/newsbox/views.py b/newsbox/views.py index 8c5fa5b9e4c0df5f85764b9ad198a6053a1c902d..18c0c3f2a8d49ed1ef351dffff2978e7c92aa53a 100644 --- a/newsbox/views.py +++ b/newsbox/views.py @@ -46,10 +46,10 @@ class NewsboxBaseArchiveView(object): return context def get_queryset(self): - if self.request.user.is_staff: - return self.model.objects.all() - else: - return self.model.objects.published() + queryset = super(NewsboxBaseArchiveView, self).get_queryset() + if not self.request.user.is_staff: + queryset = queryset.filter(pk__in=self.model.objects.published()) + return queryset class NewsboxArchiveView(NewsboxBaseArchiveView, ArchiveIndexView): def get_context_data(self, **kwargs): diff --git a/newsbox_cms/cms_plugins.py b/newsbox_cms/cms_plugins.py index d42181a9ad6da99d06c76cc52e022ed9d7aee951..e5b2a10a54e3efe90e6987bfbc98827c46b2e830 100644 --- a/newsbox_cms/cms_plugins.py +++ b/newsbox_cms/cms_plugins.py @@ -12,14 +12,22 @@ class NewsboxPluginBase(CMSPluginBase): render_template = "newsbox_cms/list-cms.html" # template to render the plugin raw_id_fields = ('page_link',) + def get_instance_queryset(self, instance, request): + NewsboxModel = instance.newsbox_model + return NewsboxModel.objects.published() + def render(self, context, instance, placeholder): from django.db.models.loading import get_model - + NewsboxModel = instance.newsbox_model if not NewsboxModel or not issubclass(NewsboxModel, NewsboxBase): raise Exception(_("The choosen news type to display is invalid")) + newsset = self.get_instance_queryset( + instance=instance, + request=context['request']) + if instance.numitems > 0 : with_pager = instance.with_pager @@ -27,8 +35,7 @@ class NewsboxPluginBase(CMSPluginBase): from django.core.paginator import Paginator, \ EmptyPage, PageNotAnInteger - paginator = Paginator(NewsboxModel.objects.published(), - instance.numitems) + paginator = Paginator(newsset, instance.numitems) page = context['request'].GET.get('page') try: newsset = paginator.page(page) @@ -39,9 +46,8 @@ class NewsboxPluginBase(CMSPluginBase): # If page is out of range (e.g. 9999), deliver last page of results. newsset = paginator.page(paginator.num_pages) else : - newsset = NewsboxModel.objects.published()[:instance.numitems] + newsset = newsset[:instance.numitems] else : - newsset = NewsboxModel.objects.published() with_pager = False context.update({ 'instance': instance,