models.py 3.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. from django.db import models
  2. from django.utils.translation import gettext_lazy as _
  3. from userprofile.models import Users
  4. class DutyRoster(models.Model):
  5. """轮值信息模型"""
  6. class Status(models.TextChoices):
  7. ACTIVE = 'ACT', _('进行中')
  8. UPCOMING = 'UP', _('即将开始')
  9. COMPLETED = 'COM', _('已完成')
  10. duty_id = models.AutoField(primary_key=True, verbose_name="轮值ID")
  11. user = models.ForeignKey(
  12. Users,
  13. on_delete=models.CASCADE,
  14. related_name='duty_rosters',
  15. verbose_name='轮值同学'
  16. )
  17. start_date = models.DateField(verbose_name='开始日期')
  18. end_date = models.DateField(verbose_name='结束日期')
  19. status = models.CharField(
  20. max_length=3,
  21. choices=Status.choices,
  22. default=Status.UPCOMING,
  23. verbose_name='状态'
  24. )
  25. todo_items = models.TextField(verbose_name='本周待办事项', blank=True, null=True)
  26. notes = models.TextField(verbose_name='教研室注意事项', blank=True, null=True)
  27. cleaning_schedule = models.TextField(verbose_name='打扫卫生安排', blank=True, null=True)
  28. create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
  29. update_time = models.DateTimeField(auto_now=True, verbose_name='更新时间')
  30. class Meta:
  31. db_table = 'duty_roster'
  32. verbose_name = '轮值信息'
  33. verbose_name_plural = "轮值信息"
  34. ordering = ['-start_date']
  35. def __str__(self):
  36. return f"{self.user.name} {self.start_date} ~ {self.end_date}"
  37. class Meeting(models.Model):
  38. """组会模型"""
  39. class MeetingType(models.TextChoices):
  40. ONLINE = 'ON', _('线上')
  41. OFFLINE = 'OFF', _('线下')
  42. HYBRID = 'HYB', _('混合')
  43. meeting_id = models.AutoField(primary_key=True, verbose_name="组会ID")
  44. title = models.CharField(max_length=200, verbose_name='组会名称')
  45. meeting_type = models.CharField(
  46. max_length=3,
  47. choices=MeetingType.choices,
  48. default=MeetingType.ONLINE,
  49. verbose_name='会议形式'
  50. )
  51. type_desc = models.CharField(max_length=200, verbose_name='会议类型描述', blank=True, null=True)
  52. location = models.CharField(max_length=200, verbose_name='会议地点', blank=True, null=True)
  53. online_link = models.URLField(verbose_name='线上地址', blank=True, null=True)
  54. meeting_time = models.DateTimeField(verbose_name='会议时间')
  55. summary = models.TextField(verbose_name='会议纪要', blank=True, null=True)
  56. summary_doc_id = models.CharField(max_length=100, verbose_name='OnlyOffice文档ID', blank=True, null=True)
  57. duty_roster = models.ForeignKey(
  58. DutyRoster,
  59. on_delete=models.CASCADE,
  60. related_name='meetings',
  61. verbose_name='关联轮值'
  62. )
  63. published = models.BooleanField(default=False, verbose_name='已发布')
  64. create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
  65. update_time = models.DateTimeField(auto_now=True, verbose_name='更新时间')
  66. class Meta:
  67. db_table = 'meeting'
  68. verbose_name = '组会'
  69. verbose_name_plural = "组会"
  70. ordering = ['-meeting_time']
  71. def __str__(self):
  72. return f"{self.title} ({self.get_meeting_type_display()})"