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})"