|
|
# 赵瑞萍:评论模型迁移模块,用于定义Comment模型在数据库中的初始结构
|
|
|
# 该模块通过Django迁移系统创建评论表,支持用户对文章的评论及嵌套回复功能
|
|
|
# 生成于Django 4.1.7版本,包含字段定义、关联关系及数据库操作规则
|
|
|
|
|
|
# 赵瑞萍:导入Django迁移所需核心模块
|
|
|
from django.conf import settings # 用于获取项目配置的用户模型
|
|
|
from django.db import migrations, models # 提供数据库迁移操作和字段类型
|
|
|
import django.db.models.deletion # 用于定义外键删除时的关联行为
|
|
|
import django.utils.timezone # 提供带时区的时间处理工具
|
|
|
|
|
|
|
|
|
class Migration(migrations.Migration):
|
|
|
"""
|
|
|
赵瑞萍:迁移类,封装评论模型的数据库结构创建逻辑
|
|
|
负责定义迁移依赖关系和具体的表创建操作,确保数据库结构与模型一致
|
|
|
"""
|
|
|
|
|
|
# 赵瑞萍:标记为初始迁移,即首次创建该模型对应的数据库表
|
|
|
initial = True
|
|
|
|
|
|
# 赵瑞萍:迁移依赖配置,确保执行顺序正确
|
|
|
dependencies = [
|
|
|
('blog', '0001_initial'), # 依赖blog应用的初始迁移,确保Article表已存在
|
|
|
migrations.swappable_dependency(settings.AUTH_USER_MODEL), # 依赖用户模型迁移,确保用户表存在
|
|
|
]
|
|
|
|
|
|
# 赵瑞萍:数据库操作列表,此处为创建Comment表的核心操作
|
|
|
operations = [
|
|
|
# 赵瑞萍:创建Comment模型对应的数据库表
|
|
|
migrations.CreateModel(
|
|
|
name='Comment', # 模型名称,对应数据库表名为comments_comment
|
|
|
fields=[
|
|
|
# 赵瑞萍:主键字段,自动增长的大整数类型
|
|
|
('id', models.BigAutoField(
|
|
|
auto_created=True, # 自动生成主键值,无需手动赋值
|
|
|
primary_key=True, # 设为主键,唯一标识每条评论记录
|
|
|
serialize=False, # 序列化模型时不包含该字段
|
|
|
verbose_name='ID' # 后台管理界面显示的字段名称
|
|
|
)),
|
|
|
# 赵瑞萍:评论正文字段,存储用户输入的评论内容
|
|
|
('body', models.TextField(
|
|
|
max_length=300, # 限制最大长度为300字符,控制评论长度
|
|
|
verbose_name='正文' # 后台显示名称
|
|
|
)),
|
|
|
# 赵瑞萍:评论创建时间字段,记录评论发布的时间
|
|
|
('created_time', models.DateTimeField(
|
|
|
default=django.utils.timezone.now, # 默认值为当前时区时间
|
|
|
verbose_name='创建时间' # 后台显示名称
|
|
|
)),
|
|
|
# 赵瑞萍:评论修改时间字段,记录评论最后更新的时间
|
|
|
('last_mod_time', models.DateTimeField(
|
|
|
default=django.utils.timezone.now, # 默认值为当前时间,更新时需手动刷新
|
|
|
verbose_name='修改时间' # 后台显示名称
|
|
|
)),
|
|
|
# 赵瑞萍:评论显示状态字段,控制评论是否在前端展示
|
|
|
('is_enable', models.BooleanField(
|
|
|
default=True, # 默认值为True,新评论默认可见
|
|
|
verbose_name='是否显示' # 后台显示名称
|
|
|
)),
|
|
|
# 赵瑞萍:外键字段,关联文章模型,建立评论与所属文章的关系
|
|
|
('article', models.ForeignKey(
|
|
|
on_delete=django.db.models.deletion.CASCADE, # 级联删除:文章删除时,关联评论同步删除
|
|
|
to='blog.article', # 关联目标为blog应用的Article模型
|
|
|
verbose_name='文章' # 后台显示名称
|
|
|
)),
|
|
|
# 赵瑞萍:外键字段,关联用户模型,记录评论的发布者
|
|
|
('author', models.ForeignKey(
|
|
|
on_delete=django.db.models.deletion.CASCADE, # 级联删除:用户删除时,其发布的评论同步删除
|
|
|
to=settings.AUTH_USER_MODEL, # 关联目标为项目配置的用户模型
|
|
|
verbose_name='作者' # 后台显示名称
|
|
|
)),
|
|
|
# 赵瑞萍:外键自关联,实现评论的嵌套回复功能
|
|
|
('parent_comment', models.ForeignKey(
|
|
|
blank=True, # 表单提交时允许为空(一级评论无需上级评论)
|
|
|
null=True, # 数据库字段允许为NULL
|
|
|
on_delete=django.db.models.deletion.CASCADE, # 级联删除:上级评论删除时,回复评论同步删除
|
|
|
to='comments.comment', # 关联目标为当前应用的Comment模型
|
|
|
verbose_name='上级评论' # 后台显示名称
|
|
|
)),
|
|
|
],
|
|
|
# 赵瑞萍:模型元数据配置,定义表的显示和行为规则
|
|
|
options={
|
|
|
'verbose_name': '评论', # 模型的单数显示名称
|
|
|
'verbose_name_plural': '评论', # 模型的复数显示名称(中文无复数变化)
|
|
|
'ordering': ['-id'], # 默认排序规则:按id降序(最新评论优先显示)
|
|
|
'get_latest_by': 'id', # 调用latest()方法时,以id字段作为判断最新的依据
|
|
|
},
|
|
|
),
|
|
|
] |