SkyLearn-Test/core/models.py
2024-01-04 23:00:48 +03:00

87 lines
2.3 KiB
Python

from django.db import models
from django.urls import reverse
from django.core.validators import FileExtensionValidator
from django.contrib.auth.models import AbstractUser
from django.db.models import Q
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 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 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 self.semester