1
"""Managers of Zinnia"""
2
from datetime import datetime
4
from django.db import models
5
from django.contrib.sites.models import Site
13
"""Return the published tags"""
14
from tagging.models import Tag
15
from zinnia.models import Entry
16
tags_entry_published = Tag.objects.usage_for_queryset(
17
Entry.published.all())
18
# Need to do that until the issue #44 of django-tagging is fixed
19
return Tag.objects.filter(name__in=[t.name for t in tags_entry_published])
22
class AuthorPublishedManager(models.Manager):
23
"""Manager to retrieve published authors"""
25
def get_query_set(self):
26
"""Return published authors"""
28
return super(AuthorPublishedManager, self).get_query_set().filter(
29
entry__status=PUBLISHED,
30
entry__start_publication__lte=now,
31
entry__end_publication__gt=now,
32
entry__sites=Site.objects.get_current()
36
def entries_published(queryset):
37
"""Return only the entries published"""
39
return queryset.filter(status=PUBLISHED,
40
start_publication__lte=now,
41
end_publication__gt=now,
42
sites=Site.objects.get_current())
45
class EntryPublishedManager(models.Manager):
46
"""Manager to retrieve published entries"""
48
def get_query_set(self):
49
"""Return published entries"""
50
return entries_published(
51
super(EntryPublishedManager, self).get_query_set())
54
"""Return entries published on current site"""
55
return super(EntryPublishedManager, self).get_query_set(
56
).filter(sites=Site.objects.get_current())
58
def search(self, pattern):
59
"""Top level search method on entries"""
61
return self.advanced_search(pattern)
63
return self.basic_search(pattern)
65
def advanced_search(self, pattern):
66
"""Advanced search on entries"""
67
from zinnia.search import advanced_search
68
return advanced_search(pattern)
70
def basic_search(self, pattern):
71
"""Basic search on entries"""
73
for pattern in pattern.split():
74
query_part = models.Q(content__icontains=pattern) | \
75
models.Q(excerpt__icontains=pattern) | \
76
models.Q(title__icontains=pattern)
82
return self.get_query_set().filter(lookup)