修改models,把家庭事务从choice改为可自定义
This commit is contained in:
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -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='状态'),
|
||||||
|
),
|
||||||
|
]
|
||||||
112
core/models.py
112
core/models.py
@@ -1,44 +1,80 @@
|
|||||||
from django.db import models
|
from django.db import models
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
|
|
||||||
# 阅读记录类型
|
class ReadingType(models.Model):
|
||||||
READING_TYPE_CHOICES = [
|
"""阅读记录类型"""
|
||||||
('book', '书籍'),
|
name = models.CharField(max_length=20, unique=True, verbose_name="名称")
|
||||||
('article', '文章'),
|
created_at = models.DateTimeField(auto_now_add=True, verbose_name="创建时间")
|
||||||
('video', '视频'),
|
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 FamilyTaskType(models.Model):
|
||||||
FAMILY_TASK_TYPE_CHOICES = [
|
"""家庭事项类型"""
|
||||||
('purchase', '采购'),
|
name = models.CharField(max_length=20, unique=True, verbose_name="名称")
|
||||||
('housework', '家务'),
|
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 Priority(models.Model):
|
||||||
PRIORITY_CHOICES = [
|
"""优先级"""
|
||||||
('low', '低'),
|
name = models.CharField(max_length=10, unique=True, verbose_name="名称")
|
||||||
('medium', '中'),
|
created_at = models.DateTimeField(auto_now_add=True, verbose_name="创建时间")
|
||||||
('high', '高'),
|
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 Status(models.Model):
|
||||||
STATUS_CHOICES = [
|
"""状态"""
|
||||||
('pending', '待处理'),
|
name = models.CharField(max_length=20, unique=True, verbose_name="名称")
|
||||||
('completed', '已完成'),
|
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 PlanType(models.Model):
|
||||||
PLAN_TYPE_CHOICES = [
|
"""今日计划类型"""
|
||||||
('reading', '阅读'),
|
name = models.CharField(max_length=20, unique=True, verbose_name="名称")
|
||||||
('insight', '感悟'),
|
created_at = models.DateTimeField(auto_now_add=True, verbose_name="创建时间")
|
||||||
('family', '家庭事项'),
|
updated_at = models.DateTimeField(auto_now=True, verbose_name="更新时间")
|
||||||
('other', '其他'),
|
|
||||||
]
|
class Meta:
|
||||||
|
verbose_name = "今日计划类型"
|
||||||
|
verbose_name_plural = "今日计划类型"
|
||||||
|
ordering = ['name']
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return self.name
|
||||||
|
|
||||||
class ReadingRecord(models.Model):
|
class ReadingRecord(models.Model):
|
||||||
"""阅读记录表"""
|
"""阅读记录表"""
|
||||||
date = models.DateField(default=timezone.now, verbose_name="日期")
|
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="标题")
|
title = models.CharField(max_length=200, verbose_name="标题")
|
||||||
source = models.CharField(max_length=200, blank=True, null=True, 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="进度")
|
progress = models.CharField(max_length=100, blank=True, null=True, verbose_name="进度")
|
||||||
@@ -52,7 +88,7 @@ class ReadingRecord(models.Model):
|
|||||||
ordering = ['-date', '-created_at']
|
ordering = ['-date', '-created_at']
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return f"{self.title} ({self.get_type_display()})"
|
return f"{self.title} ({self.type.name})"
|
||||||
|
|
||||||
class InsightRecord(models.Model):
|
class InsightRecord(models.Model):
|
||||||
"""感悟记录表"""
|
"""感悟记录表"""
|
||||||
@@ -72,10 +108,10 @@ class InsightRecord(models.Model):
|
|||||||
|
|
||||||
class FamilyTask(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="内容")
|
content = models.TextField(verbose_name="内容")
|
||||||
priority = models.CharField(max_length=10, choices=PRIORITY_CHOICES, default='medium', verbose_name="优先级")
|
priority = models.ForeignKey(Priority, on_delete=models.CASCADE, default=2, verbose_name="优先级")
|
||||||
status = models.CharField(max_length=20, choices=STATUS_CHOICES, default='pending', verbose_name="状态")
|
status = models.ForeignKey(Status, on_delete=models.CASCADE, default=1, verbose_name="状态")
|
||||||
deadline = models.DateField(blank=True, null=True, verbose_name="截止日期")
|
deadline = models.DateField(blank=True, null=True, verbose_name="截止日期")
|
||||||
created_at = models.DateTimeField(auto_now_add=True, verbose_name="创建时间")
|
created_at = models.DateTimeField(auto_now_add=True, verbose_name="创建时间")
|
||||||
updated_at = models.DateTimeField(auto_now=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']
|
ordering = ['-priority', '-deadline', '-created_at']
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return f"{self.get_type_display()} - {self.content[:20]}..."
|
return f"{self.type.name} - {self.content[:20]}..."
|
||||||
|
|
||||||
class TodayPlan(models.Model):
|
class TodayPlan(models.Model):
|
||||||
"""今日计划表"""
|
"""今日计划表"""
|
||||||
date = models.DateField(default=timezone.now, verbose_name="日期")
|
date = models.DateField(default=timezone.now, verbose_name="日期")
|
||||||
content = models.TextField(verbose_name="内容")
|
content = models.TextField(verbose_name="内容")
|
||||||
priority = models.CharField(max_length=10, choices=PRIORITY_CHOICES, default='medium', verbose_name="优先级")
|
priority = models.ForeignKey(Priority, on_delete=models.CASCADE, default=2, verbose_name="优先级")
|
||||||
type = models.CharField(max_length=20, choices=PLAN_TYPE_CHOICES, default='other', verbose_name="类型")
|
type = models.ForeignKey(PlanType, on_delete=models.CASCADE, default=4, verbose_name="类型")
|
||||||
status = models.CharField(max_length=20, choices=STATUS_CHOICES, default='pending', verbose_name="状态")
|
status = models.ForeignKey(Status, on_delete=models.CASCADE, default=1, verbose_name="状态")
|
||||||
created_at = models.DateTimeField(auto_now_add=True, verbose_name="创建时间")
|
created_at = models.DateTimeField(auto_now_add=True, verbose_name="创建时间")
|
||||||
updated_at = models.DateTimeField(auto_now=True, verbose_name="更新时间")
|
updated_at = models.DateTimeField(auto_now=True, verbose_name="更新时间")
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user