from django.db import models from django.contrib.auth import get_user_model from django.core.validators import MinLengthValidator User = get_user_model() class DailyReport(models.Model): """日报模型""" user = models.ForeignKey( User, on_delete=models.CASCADE, verbose_name="提交人", related_name='daily_reports' ) work_summary = models.TextField( "工作总结", validators=[MinLengthValidator(10, message="工作总结至少需要10个字符")] ) next_day_plan = models.TextField( "明日计划", validators=[MinLengthValidator(10, message="明日计划至少需要10个字符")] ) difficulties = models.TextField( "遇到的困难", blank=True, null=True, help_text="可选:描述工作中遇到的问题或困难" ) suggestions = models.TextField( "建议或意见", blank=True, null=True, help_text="可选:对工作或团队的建议" ) report_date = models.DateField("日报日期", help_text="填写日报对应的日期") created_at = models.DateTimeField("提交时间", auto_now_add=True) updated_at = models.DateTimeField("更新时间", auto_now=True) is_draft = models.BooleanField("草稿状态", default=False, help_text="是否为草稿") class Meta: verbose_name = "日报" verbose_name_plural = verbose_name ordering = ['-report_date', '-created_at'] unique_together = [['user', 'report_date']] # 每个用户每天只能有一份日报 indexes = [ models.Index(fields=['user', 'report_date']), models.Index(fields=['report_date']), models.Index(fields=['-created_at']), ] def __str__(self): return f'{self.user.username} - {self.report_date}' @property def work_summary_preview(self): """工作总结预览(前100个字符)""" return self.work_summary[:100] + '...' if len(self.work_summary) > 100 else self.work_summary @property def next_day_plan_preview(self): """明日计划预览(前100个字符)""" return self.next_day_plan[:100] + '...' if len(self.next_day_plan) > 100 else self.next_day_plan class ReportComment(models.Model): """日报评论模型""" report = models.ForeignKey( DailyReport, on_delete=models.CASCADE, related_name='comments', verbose_name="关联日报" ) user = models.ForeignKey( User, on_delete=models.CASCADE, verbose_name="评论人" ) content = models.TextField("评论内容") created_at = models.DateTimeField("评论时间", auto_now_add=True) updated_at = models.DateTimeField("更新时间", auto_now=True) class Meta: verbose_name = "日报评论" verbose_name_plural = verbose_name ordering = ['-created_at'] def __str__(self): return f'{self.user.username} 评论了 {self.report}'