from django.db import models from django.utils.translation import gettext_lazy as _ from userprofile.models import Users class DutyRoster(models.Model): """轮值信息模型""" class Status(models.TextChoices): ACTIVE = 'ACT', _('进行中') UPCOMING = 'UP', _('即将开始') COMPLETED = 'COM', _('已完成') duty_id = models.AutoField(primary_key=True, verbose_name="轮值ID") user = models.ForeignKey( Users, on_delete=models.CASCADE, related_name='duty_rosters', verbose_name='轮值同学' ) start_date = models.DateField(verbose_name='开始日期') end_date = models.DateField(verbose_name='结束日期') status = models.CharField( max_length=3, choices=Status.choices, default=Status.UPCOMING, verbose_name='状态' ) todo_items = models.TextField(verbose_name='本周待办事项', blank=True, null=True) notes = models.TextField(verbose_name='教研室注意事项', blank=True, null=True) cleaning_schedule = models.TextField(verbose_name='打扫卫生安排', blank=True, null=True) create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间') update_time = models.DateTimeField(auto_now=True, verbose_name='更新时间') class Meta: db_table = 'duty_roster' verbose_name = '轮值信息' verbose_name_plural = "轮值信息" ordering = ['-start_date'] def __str__(self): return f"{self.user.name} {self.start_date} ~ {self.end_date}" class Meeting(models.Model): """组会模型""" class MeetingType(models.TextChoices): ONLINE = 'ON', _('线上') OFFLINE = 'OFF', _('线下') HYBRID = 'HYB', _('混合') meeting_id = models.AutoField(primary_key=True, verbose_name="组会ID") title = models.CharField(max_length=200, verbose_name='组会名称') meeting_type = models.CharField( max_length=3, choices=MeetingType.choices, default=MeetingType.ONLINE, verbose_name='会议形式' ) type_desc = models.CharField(max_length=200, verbose_name='会议类型描述', blank=True, null=True) location = models.CharField(max_length=200, verbose_name='会议地点', blank=True, null=True) online_link = models.URLField(verbose_name='线上地址', blank=True, null=True) meeting_time = models.DateTimeField(verbose_name='会议时间') summary = models.TextField(verbose_name='会议纪要', blank=True, null=True) summary_doc_id = models.CharField(max_length=100, verbose_name='OnlyOffice文档ID', blank=True, null=True) duty_roster = models.ForeignKey( DutyRoster, on_delete=models.CASCADE, related_name='meetings', verbose_name='关联轮值' ) published = models.BooleanField(default=False, verbose_name='已发布') create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间') update_time = models.DateTimeField(auto_now=True, verbose_name='更新时间') class Meta: db_table = 'meeting' verbose_name = '组会' verbose_name_plural = "组会" ordering = ['-meeting_time'] def __str__(self): return f"{self.title} ({self.get_meeting_type_display()})"