code optimization

This commit is contained in:
2025-02-02 12:42:20 +01:00
parent ace625a530
commit 2bc64cdc5b
10 changed files with 214 additions and 225 deletions

View File

@@ -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