# 赵瑞萍:评论模型迁移模块,用于定义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字段作为判断最新的依据 }, ), ]