Files

90 lines
3.0 KiB
Python
Raw Permalink Normal View History

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}'