# Generated by Django 6.0.7 on 2026-07-12 07:31 import django.db.models.deletion from django.conf import settings from django.db import migrations, models class Migration(migrations.Migration): initial = True dependencies = [ migrations.swappable_dependency(settings.AUTH_USER_MODEL), ] operations = [ migrations.CreateModel( name='ExamSet', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('title', models.CharField(max_length=200)), ('created_at', models.DateTimeField(auto_now_add=True)), ], ), migrations.CreateModel( name='Section', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('section_type', models.CharField(choices=[('listening', 'Listening'), ('reading', 'Reading'), ('writing', 'Writing'), ('speaking', 'Speaking')], max_length=20)), ('time_limit_minutes', models.PositiveIntegerField()), ('audio_file', models.FileField(blank=True, null=True, upload_to='audio/')), ('exam_set', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='sections', to='exams.examset')), ], ), migrations.CreateModel( name='Question', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('order', models.PositiveIntegerField()), ('question_type', models.CharField(choices=[('mcq', 'Multiple Choice'), ('gap', 'Gap Fill'), ('matching', 'Matching'), ('essay', 'Essay'), ('speaking', 'Speaking Prompt')], max_length=20)), ('prompt', models.TextField()), ('options', models.JSONField(blank=True, null=True)), ('correct_answer', models.TextField(blank=True, null=True)), ('section', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='questions', to='exams.section')), ], ), migrations.CreateModel( name='StudentAttempt', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('started_at', models.DateTimeField(auto_now_add=True)), ('submitted_at', models.DateTimeField(blank=True, null=True)), ('is_complete', models.BooleanField(default=False)), ('exam_set', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='exams.examset')), ('student', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), ], ), migrations.CreateModel( name='StudentAnswer', fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('answer_text', models.TextField(blank=True)), ('is_correct', models.BooleanField(null=True)), ('manual_score', models.FloatField(blank=True, null=True)), ('question', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='exams.question')), ('attempt', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='answers', to='exams.studentattempt')), ], ), ]