SkyLearn-Test/core/models.py
2024-10-05 00:55:24 +03:00

94 lines
2.5 KiB
Python

from django.db import models
from django.db.models import Q
from django.utils.translation import gettext_lazy as _
NEWS = _("News")
EVENTS = _("Event")
POST = (
(NEWS, _("News")),
(EVENTS, _("Event")),
)
FIRST = _("First")
SECOND = _("Second")
THIRD = _("Third")
SEMESTER = (
(FIRST, _("First")),
(SECOND, _("Second")),
(THIRD, _("Third")),
)
class NewsAndEventsQuerySet(models.query.QuerySet):
def search(self, query):
lookups = (
Q(title__icontains=query)
| Q(summary__icontains=query)
| Q(posted_as__icontains=query)
)
return self.filter(lookups).distinct()
class NewsAndEventsManager(models.Manager):
def get_queryset(self):
return NewsAndEventsQuerySet(self.model, using=self._db)
def all(self):
return self.get_queryset()
def get_by_id(self, id):
qs = self.get_queryset().filter(
id=id
) # NewsAndEvents.objects == self.get_queryset()
if qs.count() == 1:
return qs.first()
return None
def search(self, query):
return self.get_queryset().search(query)
class NewsAndEvents(models.Model):
title = models.CharField(max_length=200, null=True)
summary = models.TextField(max_length=200, blank=True, null=True)
posted_as = models.CharField(choices=POST, max_length=10)
updated_date = models.DateTimeField(auto_now=True, auto_now_add=False, null=True)
upload_time = models.DateTimeField(auto_now=False, auto_now_add=True, null=True)
objects = NewsAndEventsManager()
def __str__(self):
return f"{self.title}"
class Session(models.Model):
session = models.CharField(max_length=200, unique=True)
is_current_session = models.BooleanField(default=False, blank=True, null=True)
next_session_begins = models.DateField(blank=True, null=True)
def __str__(self):
return f"{self.session}"
class Semester(models.Model):
semester = models.CharField(max_length=10, choices=SEMESTER, blank=True)
is_current_semester = models.BooleanField(default=False, blank=True, null=True)
session = models.ForeignKey(
Session, on_delete=models.CASCADE, blank=True, null=True
)
next_semester_begins = models.DateField(null=True, blank=True)
def __str__(self):
return f"{self.semester}"
class ActivityLog(models.Model):
message = models.TextField()
created_at = models.DateTimeField(auto_now=True)
def __str__(self):
return f"[{self.created_at}]{self.message}"