61 lines
2.4 KiB
Python
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})"
|