diff --git a/src/django-master/comments/migrations/0001_initial.py b/src/django-master/comments/migrations/0001_initial.py index 61d1e53..c6d9eb5 100644 --- a/src/django-master/comments/migrations/0001_initial.py +++ b/src/django-master/comments/migrations/0001_initial.py @@ -1,38 +1,91 @@ # Generated by Django 4.1.7 on 2023-03-02 07:14 +# Django自动生成的数据库迁移文件:用于创建Comment(评论)模型对应的数据库表 +# 迁移文件作用:记录模型结构变化,通过`python manage.py migrate`同步到数据库 +# 导入Django迁移所需模块:配置、迁移基类、字段类型、关联逻辑、时间工具 from django.conf import settings from django.db import migrations, models -import django.db.models.deletion -import django.utils.timezone +import django.db.models.deletion # 用于定义外键删除策略(如CASCADE) +import django.utils.timezone # 用于时间字段的默认值 class Migration(migrations.Migration): + """ + Comment模型的初始迁移类:负责在数据库中创建`comments_comment`表 + 所有迁移类都必须继承migrations.Migration + """ + # 标识该迁移是模型的「初始迁移」(第一次为Comment模型创建表) initial = True + # 迁移依赖:执行当前迁移前,必须先执行依赖的迁移 dependencies = [ - ('blog', '0001_initial'), - migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('blog', '0001_initial'), # 依赖blog应用的0001_initial迁移(因Comment关联blog的Article模型) + migrations.swappable_dependency(settings.AUTH_USER_MODEL), # 依赖用户模型的可交换迁移(适配自定义用户模型) ] + # 迁移操作:当前迁移要执行的具体数据库操作(此处为「创建Comment表」) operations = [ + # 1. 创建Comment模型对应的数据库表 migrations.CreateModel( - name='Comment', + name='Comment', # 模型名称(与代码中定义的Comment类一致) + # 2. 定义表的字段(对应模型中的字段,映射到数据库表的列) fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('body', models.TextField(max_length=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, verbose_name='是否显示')), - ('article', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='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, on_delete=django.db.models.deletion.CASCADE, to='comments.comment', verbose_name='上级评论')), + # 主键字段:BigAutoField(自增bigint类型),Django默认主键,无需在模型中手动定义 + ('id', models.BigAutoField( + auto_created=True, # 自动创建 + primary_key=True, # 设为主键 + serialize=False, # 不序列化(主键无需序列化) + verbose_name='ID' # 字段显示名(Admin后台中显示) + )), + # 评论正文字段:TextField(长文本类型),对应模型中的body字段 + ('body', models.TextField( + max_length=300, # 最大长度300字符 + verbose_name='正文' # 显示名 + )), + # 创建时间字段:DateTimeField(日期时间类型),对应模型中的created_time + ('created_time', models.DateTimeField( + default=django.utils.timezone.now, # 默认值为当前时区时间 + verbose_name='创建时间' + )), + # 修改时间字段:DateTimeField,对应模型中的last_mod_time + ('last_mod_time', models.DateTimeField( + default=django.utils.timezone.now, + verbose_name='修改时间' + )), + # 是否显示字段:BooleanField(布尔类型),对应模型中的is_enable + ('is_enable', models.BooleanField( + default=True, # 默认值为True(创建后默认显示) + verbose_name='是否显示' + )), + # 外键:关联文章(blog应用的Article模型),对应模型中的article字段 + ('article', models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, # 级联删除:文章删,评论删 + to='blog.article', # 关联目标:blog应用的Article模型 + verbose_name='文章' + )), + # 外键:关联用户(项目配置的用户模型),对应模型中的author字段 + ('author', models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, # 级联删除:用户删,评论删 + to=settings.AUTH_USER_MODEL, # 关联目标:自定义用户模型(灵活适配) + verbose_name='作者' + )), + # 外键:关联父评论(自关联,Comment模型自身),对应模型中的parent_comment字段 + ('parent_comment', models.ForeignKey( + blank=True, # 表单中允许为空(普通评论无父评论) + null=True, # 数据库中允许为空(与blank=True配合) + on_delete=django.db.models.deletion.CASCADE, # 级联删除:父评论删,子评论删 + to='comments.comment', # 关联目标:comments应用的Comment模型(自关联) + verbose_name='上级评论' + )), ], + # 3. 模型的额外配置(映射到数据库表的属性和默认行为) options={ - 'verbose_name': '评论', - 'verbose_name_plural': '评论', - 'ordering': ['-id'], - 'get_latest_by': 'id', + 'verbose_name': '评论', # 模型单数显示名(Admin中显示) + 'verbose_name_plural': '评论', # 模型复数显示名(与单数一致,避免“评论s”) + 'ordering': ['-id'], # 表数据默认排序:按id倒序(最新评论在前) + 'get_latest_by': 'id', # 用Model.objects.latest()时,按id取最新数据 + # 注:Django会自动根据模型名生成表名:app名_模型名 → comments_comment }, ), - ] + ] \ No newline at end of file