# Generated by Django 6.0.1 on 2026-03-10 02:35 import django.db.models.deletion from django.db import migrations, models class Migration(migrations.Migration): initial = True dependencies = [ ('shop', '0039_vccourse_video_embed_code'), ] operations = [ migrations.CreateModel( name='Competition', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('title', models.CharField(max_length=200, verbose_name='比赛名称')), ('description', models.TextField(verbose_name='比赛简介')), ('rule_description', models.TextField(verbose_name='规则说明')), ('condition_description', models.TextField(blank=True, verbose_name='参赛条件说明')), ('cover_image', models.ImageField(blank=True, null=True, upload_to='competitions/covers/', verbose_name='封面图')), ('start_time', models.DateTimeField(verbose_name='开始时间')), ('end_time', models.DateTimeField(verbose_name='结束时间')), ('status', models.CharField(choices=[('draft', '草稿'), ('published', '已发布'), ('registration', '报名中'), ('submission', '作品提交中'), ('judging', '评审中'), ('ended', '已结束')], default='draft', max_length=20, verbose_name='状态')), ('is_active', models.BooleanField(default=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': ['-created_at'], }, ), migrations.CreateModel( name='CompetitionEnrollment', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('role', models.CharField(choices=[('contestant', '选手'), ('judge', '评委'), ('guest', '嘉宾')], default='contestant', max_length=20, verbose_name='角色')), ('status', models.CharField(choices=[('pending', '待审核'), ('approved', '已通过'), ('rejected', '已拒绝')], default='pending', max_length=20, verbose_name='状态')), ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='申请时间')), ('updated_at', models.DateTimeField(auto_now=True, verbose_name='更新时间')), ('competition', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='enrollments', to='competition.competition', verbose_name='所属比赛')), ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='competitions', to='shop.wechatuser', verbose_name='用户')), ], options={ 'verbose_name': '比赛人员', 'verbose_name_plural': '人员管理', 'unique_together': {('competition', 'user')}, }, ), migrations.CreateModel( name='Project', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('title', models.CharField(max_length=200, verbose_name='项目名称')), ('description', models.TextField(verbose_name='项目介绍')), ('team_info', models.TextField(blank=True, verbose_name='团队介绍')), ('cover_image', models.ImageField(blank=True, null=True, upload_to='competitions/projects/covers/', verbose_name='项目封面')), ('status', models.CharField(choices=[('draft', '草稿'), ('submitted', '已提交')], default='draft', max_length=20, verbose_name='状态')), ('final_score', models.DecimalField(decimal_places=2, default=0.0, max_digits=10, verbose_name='最终得分')), ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')), ('updated_at', models.DateTimeField(auto_now=True, verbose_name='更新时间')), ('competition', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='projects', to='competition.competition', verbose_name='所属比赛')), ('contestant', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='projects', to='competition.competitionenrollment', verbose_name='参赛选手')), ], options={ 'verbose_name': '参赛项目', 'verbose_name_plural': '项目管理', 'ordering': ['-final_score', '-created_at'], }, ), migrations.CreateModel( name='Comment', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('content', models.TextField(verbose_name='评语内容')), ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='评论时间')), ('updated_at', models.DateTimeField(auto_now=True, verbose_name='更新时间')), ('judge', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='given_comments', to='competition.competitionenrollment', verbose_name='评委')), ('project', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='comments', to='competition.project', verbose_name='所属项目')), ], options={ 'verbose_name': '评委评语', 'verbose_name_plural': '评语管理', }, ), migrations.CreateModel( name='ProjectFile', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('file_type', models.CharField(choices=[('ppt', 'PPT演示文稿'), ('pdf', 'PDF文档'), ('image', '图片'), ('video', '视频'), ('doc', '文档'), ('other', '其他')], default='other', max_length=20, verbose_name='文件类型')), ('file', models.FileField(blank=True, null=True, upload_to='competitions/projects/files/', verbose_name='文件')), ('file_url', models.URLField(blank=True, help_text='视频等大文件建议使用外部链接', null=True, verbose_name='文件链接')), ('name', models.CharField(blank=True, max_length=100, verbose_name='文件名称')), ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='上传时间')), ('project', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='files', to='competition.project', verbose_name='所属项目')), ], options={ 'verbose_name': '项目附件', 'verbose_name_plural': '附件管理', }, ), migrations.CreateModel( name='ScoreDimension', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('name', models.CharField(max_length=100, verbose_name='维度名称')), ('description', models.TextField(blank=True, verbose_name='维度说明')), ('weight', models.DecimalField(decimal_places=2, default=1.0, help_text='例如 0.3 表示 30%', max_digits=5, verbose_name='权重')), ('max_score', models.IntegerField(default=100, verbose_name='满分值')), ('order', models.IntegerField(default=0, verbose_name='排序权重')), ('competition', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='score_dimensions', to='competition.competition', verbose_name='所属比赛')), ], options={ 'verbose_name': '评分维度', 'verbose_name_plural': '评分维度配置', 'ordering': ['order'], }, ), migrations.CreateModel( name='Score', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('score', models.DecimalField(decimal_places=1, max_digits=5, verbose_name='得分')), ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='打分时间')), ('updated_at', models.DateTimeField(auto_now=True, verbose_name='更新时间')), ('judge', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='given_scores', to='competition.competitionenrollment', verbose_name='评委')), ('project', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='scores', to='competition.project', verbose_name='所属项目')), ('dimension', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='competition.scoredimension', verbose_name='评分维度')), ], options={ 'verbose_name': '评分记录', 'verbose_name_plural': '评分记录', 'unique_together': {('project', 'judge', 'dimension')}, }, ), ]