point_system/point_system/students/models.py

61 lines
2.4 KiB
Python

from django.db import models
DEGREE_CHOICES = [
('學士生', '學士生'),
('碩士生', '碩士生'),
('博士生', '博士生'),
]
CATEGORY_CHOICES = [
('一般生', '一般生'),
('在職生', '在職生'),
('交換中', '交換中'),
]
class Student(models.Model):
student_id = models.CharField(max_length=10, primary_key=True)
name = models.CharField(max_length=255)
degree_type = models.CharField(max_length=10, choices=DEGREE_CHOICES, default='碩士生', verbose_name='學位類別')
student_category = models.CharField(max_length=10, choices=CATEGORY_CHOICES, default='一般生', verbose_name='身分類別')
grade = models.IntegerField(null=True, blank=True)
hope_admission_scheme = models.BooleanField(default=False, null=True, blank=True)
tuition_waiver = models.BooleanField(default=False, null=True, blank=True)
financial_assistance_disadvantaged_students = models.BooleanField(default=False, null=True, blank=True)
loan = models.IntegerField(null=True, blank=True, default=0)
email = models.EmailField(null=True, blank=True, verbose_name='主要 Email')
email2 = models.EmailField(null=True, blank=True, verbose_name='第二 Email')
is_active = models.BooleanField(default=True)
def __str__(self):
return f"{self.name} ({self.degree_type} / {self.student_category})"
class PointRecord(models.Model):
student = models.ForeignKey(Student, on_delete=models.CASCADE)
datetime = models.DateTimeField(auto_now_add=True) # Combined date and time field
class Meta:
verbose_name = 'point record'
verbose_name_plural = 'point records'
def __str__(self):
return f"{self.datetime} - {self.student}"
class WeeklySchedule(models.Model):
student = models.ForeignKey(Student, on_delete=models.CASCADE, related_name='schedules')
date = models.DateField(verbose_name='週會日期')
year = models.IntegerField(verbose_name='年份')
month = models.IntegerField(verbose_name='月份')
class Meta:
unique_together = ('student', 'date')
verbose_name = '週會排程'
verbose_name_plural = '週會排程'
def save(self, *args, **kwargs):
if self.date:
self.year = self.date.year
self.month = self.date.month
super().save(*args, **kwargs)
def __str__(self):
return f"{self.date} - {self.student.name} ({self.student.student_id})"