diff --git a/core/__pycache__/forms.cpython-313.pyc b/core/__pycache__/forms.cpython-313.pyc index 1058f08..cb756be 100644 Binary files a/core/__pycache__/forms.cpython-313.pyc and b/core/__pycache__/forms.cpython-313.pyc differ diff --git a/core/__pycache__/models.cpython-313.pyc b/core/__pycache__/models.cpython-313.pyc index 81e73a8..74a1eec 100644 Binary files a/core/__pycache__/models.cpython-313.pyc and b/core/__pycache__/models.cpython-313.pyc differ diff --git a/core/__pycache__/urls.cpython-313.pyc b/core/__pycache__/urls.cpython-313.pyc index 8c2bda5..84b50cc 100644 Binary files a/core/__pycache__/urls.cpython-313.pyc and b/core/__pycache__/urls.cpython-313.pyc differ diff --git a/core/__pycache__/views.cpython-313.pyc b/core/__pycache__/views.cpython-313.pyc index 868d009..6b2b47b 100644 Binary files a/core/__pycache__/views.cpython-313.pyc and b/core/__pycache__/views.cpython-313.pyc differ diff --git a/core/migrations/0002_familytasktype_plantype_priority_readingtype_status_and_more.py b/core/migrations/0002_familytasktype_plantype_priority_readingtype_status_and_more.py new file mode 100644 index 0000000..20353de --- /dev/null +++ b/core/migrations/0002_familytasktype_plantype_priority_readingtype_status_and_more.py @@ -0,0 +1,119 @@ +# Generated by Django 5.1.4 on 2026-01-05 12:55 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='FamilyTaskType', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=20, unique=True, verbose_name='名称')), + ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')), + ('updated_at', models.DateTimeField(auto_now=True, verbose_name='更新时间')), + ], + options={ + 'verbose_name': '家庭事项类型', + 'verbose_name_plural': '家庭事项类型', + 'ordering': ['name'], + }, + ), + migrations.CreateModel( + name='PlanType', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=20, unique=True, verbose_name='名称')), + ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')), + ('updated_at', models.DateTimeField(auto_now=True, verbose_name='更新时间')), + ], + options={ + 'verbose_name': '今日计划类型', + 'verbose_name_plural': '今日计划类型', + 'ordering': ['name'], + }, + ), + migrations.CreateModel( + name='Priority', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=10, unique=True, verbose_name='名称')), + ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')), + ('updated_at', models.DateTimeField(auto_now=True, verbose_name='更新时间')), + ], + options={ + 'verbose_name': '优先级', + 'verbose_name_plural': '优先级', + 'ordering': ['name'], + }, + ), + migrations.CreateModel( + name='ReadingType', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=20, unique=True, verbose_name='名称')), + ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')), + ('updated_at', models.DateTimeField(auto_now=True, verbose_name='更新时间')), + ], + options={ + 'verbose_name': '阅读记录类型', + 'verbose_name_plural': '阅读记录类型', + 'ordering': ['name'], + }, + ), + migrations.CreateModel( + name='Status', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=20, unique=True, verbose_name='名称')), + ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')), + ('updated_at', models.DateTimeField(auto_now=True, verbose_name='更新时间')), + ], + options={ + 'verbose_name': '状态', + 'verbose_name_plural': '状态', + 'ordering': ['name'], + }, + ), + migrations.AlterField( + model_name='familytask', + name='type', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='core.familytasktype', verbose_name='类型'), + ), + migrations.AlterField( + model_name='todayplan', + name='type', + field=models.ForeignKey(default=4, on_delete=django.db.models.deletion.CASCADE, to='core.plantype', verbose_name='类型'), + ), + migrations.AlterField( + model_name='familytask', + name='priority', + field=models.ForeignKey(default=2, on_delete=django.db.models.deletion.CASCADE, to='core.priority', verbose_name='优先级'), + ), + migrations.AlterField( + model_name='todayplan', + name='priority', + field=models.ForeignKey(default=2, on_delete=django.db.models.deletion.CASCADE, to='core.priority', verbose_name='优先级'), + ), + migrations.AlterField( + model_name='readingrecord', + name='type', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='core.readingtype', verbose_name='类型'), + ), + migrations.AlterField( + model_name='familytask', + name='status', + field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, to='core.status', verbose_name='状态'), + ), + migrations.AlterField( + model_name='todayplan', + name='status', + field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, to='core.status', verbose_name='状态'), + ), + ] diff --git a/core/models.py b/core/models.py index c825936..a1f93e9 100644 --- a/core/models.py +++ b/core/models.py @@ -1,44 +1,80 @@ from django.db import models from django.utils import timezone -# 阅读记录类型 -READING_TYPE_CHOICES = [ - ('book', '书籍'), - ('article', '文章'), - ('video', '视频'), -] +class ReadingType(models.Model): + """阅读记录类型""" + name = models.CharField(max_length=20, unique=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 = ['name'] + + def __str__(self): + return self.name -# 家庭事项类型 -FAMILY_TASK_TYPE_CHOICES = [ - ('purchase', '采购'), - ('housework', '家务'), -] +class FamilyTaskType(models.Model): + """家庭事项类型""" + name = models.CharField(max_length=20, unique=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 = ['name'] + + def __str__(self): + return self.name -# 优先级 -PRIORITY_CHOICES = [ - ('low', '低'), - ('medium', '中'), - ('high', '高'), -] +class Priority(models.Model): + """优先级""" + name = models.CharField(max_length=10, unique=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 = ['name'] + + def __str__(self): + return self.name -# 状态 -STATUS_CHOICES = [ - ('pending', '待处理'), - ('completed', '已完成'), -] +class Status(models.Model): + """状态""" + name = models.CharField(max_length=20, unique=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 = ['name'] + + def __str__(self): + return self.name -# 今日计划类型 -PLAN_TYPE_CHOICES = [ - ('reading', '阅读'), - ('insight', '感悟'), - ('family', '家庭事项'), - ('other', '其他'), -] +class PlanType(models.Model): + """今日计划类型""" + name = models.CharField(max_length=20, unique=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 = ['name'] + + def __str__(self): + return self.name class ReadingRecord(models.Model): """阅读记录表""" date = models.DateField(default=timezone.now, verbose_name="日期") - type = models.CharField(max_length=20, choices=READING_TYPE_CHOICES, verbose_name="类型") + type = models.ForeignKey(ReadingType, on_delete=models.CASCADE, 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="进度") @@ -52,7 +88,7 @@ class ReadingRecord(models.Model): ordering = ['-date', '-created_at'] def __str__(self): - return f"{self.title} ({self.get_type_display()})" + return f"{self.title} ({self.type.name})" class InsightRecord(models.Model): """感悟记录表""" @@ -72,10 +108,10 @@ class InsightRecord(models.Model): class FamilyTask(models.Model): """家庭事项表""" - type = models.CharField(max_length=20, choices=FAMILY_TASK_TYPE_CHOICES, verbose_name="类型") + type = models.ForeignKey(FamilyTaskType, on_delete=models.CASCADE, 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="状态") + priority = models.ForeignKey(Priority, on_delete=models.CASCADE, default=2, verbose_name="优先级") + status = models.ForeignKey(Status, on_delete=models.CASCADE, default=1, 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="更新时间") @@ -86,15 +122,15 @@ class FamilyTask(models.Model): ordering = ['-priority', '-deadline', '-created_at'] def __str__(self): - return f"{self.get_type_display()} - {self.content[:20]}..." + return f"{self.type.name} - {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="状态") + priority = models.ForeignKey(Priority, on_delete=models.CASCADE, default=2, verbose_name="优先级") + type = models.ForeignKey(PlanType, on_delete=models.CASCADE, default=4, verbose_name="类型") + status = models.ForeignKey(Status, on_delete=models.CASCADE, default=1, verbose_name="状态") created_at = models.DateTimeField(auto_now_add=True, verbose_name="创建时间") updated_at = models.DateTimeField(auto_now=True, verbose_name="更新时间") diff --git a/diary_family/__pycache__/__init__.cpython-313.pyc b/diary_family/__pycache__/__init__.cpython-313.pyc index ebe61df..0f30c28 100644 Binary files a/diary_family/__pycache__/__init__.cpython-313.pyc and b/diary_family/__pycache__/__init__.cpython-313.pyc differ diff --git a/diary_family/__pycache__/celery.cpython-313.pyc b/diary_family/__pycache__/celery.cpython-313.pyc index e7196fa..bc24489 100644 Binary files a/diary_family/__pycache__/celery.cpython-313.pyc and b/diary_family/__pycache__/celery.cpython-313.pyc differ diff --git a/diary_family/__pycache__/settings.cpython-313.pyc b/diary_family/__pycache__/settings.cpython-313.pyc index 8f1c533..f9a5ce4 100644 Binary files a/diary_family/__pycache__/settings.cpython-313.pyc and b/diary_family/__pycache__/settings.cpython-313.pyc differ diff --git a/diary_family/__pycache__/urls.cpython-313.pyc b/diary_family/__pycache__/urls.cpython-313.pyc index cb6a42e..30c3abc 100644 Binary files a/diary_family/__pycache__/urls.cpython-313.pyc and b/diary_family/__pycache__/urls.cpython-313.pyc differ