You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
DjangoBlog/comments/migrations/0001_initial.py

89 lines
5.4 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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