code optimization
This commit is contained in:
@@ -2,7 +2,8 @@ import datetime
|
||||
|
||||
from django.db import models
|
||||
from django.db.models import Case, Q, When
|
||||
from django.utils import timezone
|
||||
|
||||
from .choices import PostType, Status
|
||||
|
||||
|
||||
class PublishedManager(models.Manager):
|
||||
@@ -10,33 +11,36 @@ class PublishedManager(models.Manager):
|
||||
"""
|
||||
publish all posts with status 'PUBLIC'
|
||||
"""
|
||||
qs = self.get_queryset().filter(status="20") if public else self.get_queryset()
|
||||
return qs
|
||||
return self.get_queryset().filter(status=Status.PUBLIC) if public else self.get_queryset()
|
||||
|
||||
def published_all(self, public=True):
|
||||
"""
|
||||
publish all posts with status 'PUBLIC' and 'ONLY_INTERN'
|
||||
"""
|
||||
qs = self.get_queryset().filter(~Q(status="10")) if public else self.get_queryset()
|
||||
return qs
|
||||
return (
|
||||
self.get_queryset().filter(~Q(status=Status.DRAFT)) if public else self.get_queryset()
|
||||
)
|
||||
|
||||
|
||||
class PostManager(PublishedManager, models.Manager):
|
||||
def get_queryset(self):
|
||||
qs = super().get_queryset()
|
||||
qs = qs.annotate(
|
||||
date=Case(
|
||||
When(post_type="N", then="public_date"),
|
||||
When(post_type="E", then="event_start__date"),
|
||||
When(post_type="F", then="event_start__date"),
|
||||
),
|
||||
qs = (
|
||||
super()
|
||||
.get_queryset()
|
||||
.annotate(
|
||||
date=Case(
|
||||
When(post_type=PostType.NEWS, then="public_date"),
|
||||
When(post_type=PostType.EVENT, then="event_start__date"),
|
||||
When(post_type=PostType.FETMEETING, then="event_start__date"),
|
||||
),
|
||||
)
|
||||
)
|
||||
return qs.order_by("-date", "-id")
|
||||
|
||||
def date_sorted_list(self, public=True):
|
||||
def date_sorted(self, public=True):
|
||||
return self.published(public)
|
||||
|
||||
def date_filtered_list(
|
||||
def date_filter(
|
||||
self,
|
||||
public=True,
|
||||
year=None,
|
||||
@@ -46,7 +50,7 @@ class PostManager(PublishedManager, models.Manager):
|
||||
qs_filter = Q()
|
||||
|
||||
if fet_meeting_only:
|
||||
qs_filter &= Q(post_type="F")
|
||||
qs_filter &= Q(post_type=PostType.FETMEETING)
|
||||
|
||||
if year:
|
||||
qs_filter &= Q(date__year=year)
|
||||
@@ -63,16 +67,16 @@ class ArticleManager(PublishedManager, models.Manager):
|
||||
"""
|
||||
|
||||
def get_queryset(self):
|
||||
qs = super().get_queryset().filter(Q(post_type="N") | Q(post_type="E"))
|
||||
qs = super().get_queryset().filter(Q(post_type=PostType.NEWS) | Q(post_type=PostType.EVENT))
|
||||
qs = qs.annotate(
|
||||
date=Case(
|
||||
When(post_type="N", then="public_date"),
|
||||
When(post_type="E", then="event_start__date"),
|
||||
When(post_type=PostType.NEWS, then="public_date"),
|
||||
When(post_type=PostType.EVENT, then="event_start__date"),
|
||||
),
|
||||
)
|
||||
return qs.order_by("-date", "-id")
|
||||
|
||||
def date_sorted_list(self, public=True):
|
||||
def date_sorted(self, public=True):
|
||||
return self.published(public)
|
||||
|
||||
def pinned(self, public=True):
|
||||
@@ -95,10 +99,12 @@ class ArticleManager(PublishedManager, models.Manager):
|
||||
|
||||
return (
|
||||
self.published(public)
|
||||
.filter(is_pinned=True)
|
||||
.filter(
|
||||
(Q(post_type="N") & Q(public_date__gt=post_date))
|
||||
| (Q(post_type="E") & Q(event_end__date__gt=event_date)),
|
||||
Q(is_pinned=True)
|
||||
& (
|
||||
(Q(post_type=PostType.NEWS) & Q(public_date__gt=post_date))
|
||||
| (Q(post_type=PostType.EVENT) & Q(event_end__date__gt=event_date))
|
||||
)
|
||||
)
|
||||
.first()
|
||||
)
|
||||
@@ -110,10 +116,10 @@ class NewsManager(PublishedManager, models.Manager):
|
||||
"""
|
||||
|
||||
def get_queryset(self):
|
||||
qs = super().get_queryset().filter(post_type="N")
|
||||
qs = super().get_queryset().filter(post_type=PostType.NEWS)
|
||||
qs = qs.annotate(
|
||||
date=Case(
|
||||
When(post_type="N", then="public_date"),
|
||||
When(post_type=PostType.NEWS, then="public_date"),
|
||||
),
|
||||
)
|
||||
return qs.order_by("-date")
|
||||
@@ -125,17 +131,21 @@ class AllEventManager(PublishedManager, models.Manager):
|
||||
"""
|
||||
|
||||
def get_queryset(self):
|
||||
qs = super().get_queryset().filter(Q(post_type="E") | Q(post_type="F"))
|
||||
qs = (
|
||||
super()
|
||||
.get_queryset()
|
||||
.filter(Q(post_type=PostType.EVENT) | Q(post_type=PostType.FETMEETING))
|
||||
)
|
||||
qs = qs.annotate(
|
||||
date=Case(
|
||||
When(post_type="E", then="event_start__date"),
|
||||
When(post_type="F", then="event_start__date"),
|
||||
When(post_type=PostType.EVENT, then="event_start__date"),
|
||||
When(post_type=PostType.FETMEETING, then="event_start__date"),
|
||||
),
|
||||
)
|
||||
return qs.order_by("-date")
|
||||
|
||||
def future_events(self, public=True):
|
||||
date_today = timezone.now()
|
||||
date_today = datetime.date.today()
|
||||
qs = self.published(public).filter(event_start__gt=date_today)
|
||||
return qs.reverse()
|
||||
|
||||
@@ -147,21 +157,21 @@ class EventManager(PublishedManager, models.Manager):
|
||||
"""
|
||||
|
||||
def get_queryset(self):
|
||||
qs = super().get_queryset().filter(post_type="E")
|
||||
qs = super().get_queryset().filter(post_type=PostType.EVENT)
|
||||
qs = qs.annotate(
|
||||
date=Case(
|
||||
When(post_type="E", then="event_start__date"),
|
||||
When(post_type=PostType.EVENT, then="event_start__date"),
|
||||
),
|
||||
)
|
||||
return qs.order_by("-date")
|
||||
|
||||
def future_events(self, public=True):
|
||||
date_today = timezone.now()
|
||||
date_today = datetime.date.today()
|
||||
qs = self.published(public).filter(event_start__gt=date_today)
|
||||
return qs.reverse()
|
||||
|
||||
def past_events(self, public=True):
|
||||
date_today = timezone.now()
|
||||
date_today = datetime.date.today()
|
||||
qs = self.published(public).filter(event_start__lt=date_today)
|
||||
return qs
|
||||
|
||||
@@ -172,20 +182,20 @@ class FetMeetingManager(PublishedManager, models.Manager):
|
||||
"""
|
||||
|
||||
def get_queryset(self):
|
||||
qs = super().get_queryset().filter(post_type="F")
|
||||
qs = super().get_queryset().filter(post_type=PostType.FETMEETING)
|
||||
qs = qs.annotate(
|
||||
date=Case(
|
||||
When(post_type="F", then="event_start__date"),
|
||||
When(post_type=PostType.FETMEETING, then="event_start__date"),
|
||||
),
|
||||
)
|
||||
return qs.order_by("-date")
|
||||
|
||||
def future_events(self):
|
||||
date_today = timezone.now()
|
||||
date_today = datetime.date.today()
|
||||
qs = self.published().filter(event_start__gt=date_today)
|
||||
return qs.reverse()
|
||||
|
||||
def past_events(self):
|
||||
date_today = timezone.now()
|
||||
date_today = datetime.date.today()
|
||||
qs = self.published().filter(event_start__lt=date_today)
|
||||
return qs
|
||||
|
||||
Reference in New Issue
Block a user