from django.db import models from django.utils import timezone # 阅读记录类型 READING_TYPE_CHOICES = [ ('book', '书籍'), ('article', '文章'), ('video', '视频'), ] # 家庭事项类型 FAMILY_TASK_TYPE_CHOICES = [ ('purchase', '采购'), ('housework', '家务'), ] # 优先级 PRIORITY_CHOICES = [ ('low', '低'), ('medium', '中'), ('high', '高'), ] # 状态 STATUS_CHOICES = [ ('pending', '待处理'), ('completed', '已完成'), ] # 今日计划类型 PLAN_TYPE_CHOICES = [ ('reading', '阅读'), ('insight', '感悟'), ('family', '家庭事项'), ('other', '其他'), ] class ReadingRecord(models.Model): """阅读记录表""" date = models.DateField(default=timezone.now, verbose_name="日期") type = models.CharField(max_length=20, choices=READING_TYPE_CHOICES, verbose_name="类型") title = models.CharField(max_length=200, verbose_name="标题") source = models.CharField(max_length=200, blank=True, null=True, verbose_name="来源") progress = models.CharField(max_length=100, blank=True, null=True, verbose_name="进度") file = models.FileField(upload_to='reading_files/', blank=True, null=True, verbose_name="上传文件") created_at = models.DateTimeField(auto_now_add=True, verbose_name="创建时间") updated_at = models.DateTimeField(auto_now=True, verbose_name="更新时间") class Meta: verbose_name = "阅读记录" verbose_name_plural = "阅读记录" ordering = ['-date', '-created_at'] def __str__(self): return f"{self.title} ({self.get_type_display()})" class InsightRecord(models.Model): """感悟记录表""" date = models.DateField(default=timezone.now, verbose_name="日期") content = models.TextField(verbose_name="内容") file = models.FileField(upload_to='insight_files/', blank=True, null=True, verbose_name="上传文件") created_at = models.DateTimeField(auto_now_add=True, verbose_name="创建时间") updated_at = models.DateTimeField(auto_now=True, verbose_name="更新时间") class Meta: verbose_name = "感悟记录" verbose_name_plural = "感悟记录" ordering = ['-date', '-created_at'] def __str__(self): return f"感悟记录 - {self.date}" class FamilyTask(models.Model): """家庭事项表""" type = models.CharField(max_length=20, choices=FAMILY_TASK_TYPE_CHOICES, verbose_name="类型") content = models.TextField(verbose_name="内容") priority = models.CharField(max_length=10, choices=PRIORITY_CHOICES, default='medium', verbose_name="优先级") status = models.CharField(max_length=20, choices=STATUS_CHOICES, default='pending', verbose_name="状态") deadline = models.DateField(blank=True, null=True, verbose_name="截止日期") created_at = models.DateTimeField(auto_now_add=True, verbose_name="创建时间") updated_at = models.DateTimeField(auto_now=True, verbose_name="更新时间") class Meta: verbose_name = "家庭事项" verbose_name_plural = "家庭事项" ordering = ['-priority', '-deadline', '-created_at'] def __str__(self): return f"{self.get_type_display()} - {self.content[:20]}..." class TodayPlan(models.Model): """今日计划表""" date = models.DateField(default=timezone.now, verbose_name="日期") content = models.TextField(verbose_name="内容") priority = models.CharField(max_length=10, choices=PRIORITY_CHOICES, default='medium', verbose_name="优先级") type = models.CharField(max_length=20, choices=PLAN_TYPE_CHOICES, default='other', verbose_name="类型") status = models.CharField(max_length=20, choices=STATUS_CHOICES, default='pending', verbose_name="状态") created_at = models.DateTimeField(auto_now_add=True, verbose_name="创建时间") updated_at = models.DateTimeField(auto_now=True, verbose_name="更新时间") class Meta: verbose_name = "今日计划" verbose_name_plural = "今日计划" ordering = ['-priority', '-created_at'] def __str__(self): return f"{self.date} - {self.content[:20]}..." class SystemConfig(models.Model): """系统配置表""" smtp_server = models.CharField(max_length=100, blank=True, null=True, verbose_name="SMTP服务器") smtp_port = models.IntegerField(default=587, verbose_name="SMTP端口") smtp_username = models.CharField(max_length=100, blank=True, null=True, verbose_name="SMTP用户名") smtp_password = models.CharField(max_length=100, blank=True, null=True, verbose_name="SMTP密码") send_time = models.TimeField(default='08:00', verbose_name="每日发送时间") recipient_email = models.EmailField(blank=True, null=True, verbose_name="收件人邮箱") created_at = models.DateTimeField(auto_now_add=True, verbose_name="创建时间") updated_at = models.DateTimeField(auto_now=True, verbose_name="更新时间") class Meta: verbose_name = "系统配置" verbose_name_plural = "系统配置" def __str__(self): return "系统配置" @classmethod def get_config(cls): """获取系统配置,单例模式""" config, created = cls.objects.get_or_create(pk=1) return config