f
This commit is contained in:
@@ -0,0 +1,44 @@
|
||||
# Generated by Django 5.1.1 on 2026-09-18 18:49
|
||||
|
||||
import lms.validators
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='Assignment',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('title', models.CharField(max_length=255)),
|
||||
('description', models.TextField()),
|
||||
('deadline', models.DateTimeField(blank=True, null=True)),
|
||||
('created_at', models.DateTimeField(auto_now_add=True)),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Subject',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('name', models.CharField(max_length=100)),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Submission',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('text_answer', models.TextField(blank=True, null=True)),
|
||||
('file_answer', models.FileField(blank=True, null=True, upload_to='submissions/%Y/%m/%d/', validators=[lms.validators.validate_file_extension])),
|
||||
('grade', models.CharField(blank=True, max_length=10, null=True)),
|
||||
('teacher_feedback', models.TextField(blank=True, null=True)),
|
||||
('status', models.CharField(choices=[('PENDING', 'Pending'), ('GRADED', 'Graded')], default='PENDING', max_length=20)),
|
||||
('submitted_at', models.DateTimeField(auto_now_add=True)),
|
||||
],
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,38 @@
|
||||
# Generated by Django 5.1.1 on 2026-09-18 18:49
|
||||
|
||||
import django.db.models.deletion
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
('lms', '0001_initial'),
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='assignment',
|
||||
name='created_by',
|
||||
field=models.ForeignKey(limit_choices_to={'role__in': ['TEACHER', 'ADMIN']}, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='assignment',
|
||||
name='subject',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='lms.subject'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='submission',
|
||||
name='assignment',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='submissions', to='lms.assignment'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='submission',
|
||||
name='student',
|
||||
field=models.ForeignKey(limit_choices_to={'role': 'STUDENT'}, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
|
||||
),
|
||||
]
|
||||
+104
@@ -0,0 +1,104 @@
|
||||
# Generated by Django 5.1.1 on 2026-09-18 18:59
|
||||
|
||||
import django.db.models.deletion
|
||||
import lms.validators
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('lms', '0002_initial'),
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterModelOptions(
|
||||
name='assignment',
|
||||
options={'verbose_name': 'Задание', 'verbose_name_plural': 'Задания'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='subject',
|
||||
options={'verbose_name': 'Предмет', 'verbose_name_plural': 'Предметы'},
|
||||
),
|
||||
migrations.AlterModelOptions(
|
||||
name='submission',
|
||||
options={'verbose_name': 'Ответ ученика', 'verbose_name_plural': 'Ответы учеников'},
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='assignment',
|
||||
name='created_at',
|
||||
field=models.DateTimeField(auto_now_add=True, verbose_name='Дата создания'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='assignment',
|
||||
name='created_by',
|
||||
field=models.ForeignKey(limit_choices_to={'role__in': ['TEACHER', 'ADMIN']}, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='Кем создано'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='assignment',
|
||||
name='deadline',
|
||||
field=models.DateTimeField(blank=True, null=True, verbose_name='Срок сдачи (Дедлайн)'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='assignment',
|
||||
name='description',
|
||||
field=models.TextField(verbose_name='Описание задания'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='assignment',
|
||||
name='subject',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='lms.subject', verbose_name='Предмет'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='assignment',
|
||||
name='title',
|
||||
field=models.CharField(max_length=255, verbose_name='Название задания'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='subject',
|
||||
name='name',
|
||||
field=models.CharField(max_length=100, verbose_name='Название предмета'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='submission',
|
||||
name='assignment',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='submissions', to='lms.assignment', verbose_name='Задание'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='submission',
|
||||
name='file_answer',
|
||||
field=models.FileField(blank=True, null=True, upload_to='submissions/%Y/%m/%d/', validators=[lms.validators.validate_file_extension], verbose_name='Файл с ответом'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='submission',
|
||||
name='grade',
|
||||
field=models.CharField(blank=True, max_length=10, null=True, verbose_name='Оценка'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='submission',
|
||||
name='status',
|
||||
field=models.CharField(choices=[('PENDING', 'Ожидает проверки'), ('GRADED', 'Проверено')], default='PENDING', max_length=20, verbose_name='Статус'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='submission',
|
||||
name='student',
|
||||
field=models.ForeignKey(limit_choices_to={'role': 'STUDENT'}, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='Ученик'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='submission',
|
||||
name='submitted_at',
|
||||
field=models.DateTimeField(auto_now_add=True, verbose_name='Дата отправки'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='submission',
|
||||
name='teacher_feedback',
|
||||
field=models.TextField(blank=True, null=True, verbose_name='Комментарий учителя'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='submission',
|
||||
name='text_answer',
|
||||
field=models.TextField(blank=True, null=True, verbose_name='Текстовый ответ'),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,24 @@
|
||||
# Generated by Django 5.1.1 on 2026-09-18 20:40
|
||||
|
||||
import lms.validators
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('lms', '0003_alter_assignment_options_alter_subject_options_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='assignment',
|
||||
name='attached_file',
|
||||
field=models.FileField(blank=True, null=True, upload_to='assignments/', validators=[lms.validators.validate_file_extension], verbose_name='Файл с заданием'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='assignment',
|
||||
name='correct_answer',
|
||||
field=models.TextField(blank=True, null=True, verbose_name='Правильный ответ'),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,63 @@
|
||||
# Generated by Django 5.1.1 on 2026-09-18 20:47
|
||||
|
||||
import django.db.models.deletion
|
||||
import lms.validators
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('lms', '0004_assignment_attached_file_assignment_correct_answer'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RemoveField(
|
||||
model_name='assignment',
|
||||
name='attached_file',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='assignment',
|
||||
name='correct_answer',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='submission',
|
||||
name='file_answer',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='submission',
|
||||
name='text_answer',
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Question',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('text', models.TextField(verbose_name='Текст задачи')),
|
||||
('attached_file', models.FileField(blank=True, null=True, upload_to='questions/', validators=[lms.validators.validate_file_extension], verbose_name='Файл (опционально)')),
|
||||
('question_type', models.CharField(choices=[('TEXT_AUTO', 'Краткий ответ (автопроверка)'), ('FILE_MANUAL', 'Файл/Развернутый ответ (ручная проверка)')], default='TEXT_AUTO', max_length=20, verbose_name='Тип ответа')),
|
||||
('correct_answer', models.TextField(blank=True, help_text='Оставьте пустым, если проверка ручная', null=True, verbose_name='Правильный ответ (для автопроверки)')),
|
||||
('order', models.PositiveIntegerField(default=0, verbose_name='Порядок')),
|
||||
('assignment', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='questions', to='lms.assignment', verbose_name='Задание')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'Задача',
|
||||
'verbose_name_plural': 'Задачи',
|
||||
'ordering': ['order', 'id'],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Answer',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('text_answer', models.TextField(blank=True, null=True, verbose_name='Текстовый ответ')),
|
||||
('file_answer', models.FileField(blank=True, null=True, upload_to='answers/%Y/%m/%d/', validators=[lms.validators.validate_file_extension], verbose_name='Файл с ответом')),
|
||||
('is_correct', models.BooleanField(blank=True, null=True, verbose_name='Правильно?')),
|
||||
('submission', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='answers', to='lms.submission', verbose_name='Решение (Submission)')),
|
||||
('question', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='answers', to='lms.question', verbose_name='Задача')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'Ответ на задачу',
|
||||
'verbose_name_plural': 'Ответы на задачи',
|
||||
},
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,23 @@
|
||||
# Generated by Django 5.1.1 on 2026-09-18 20:59
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('lms', '0005_remove_assignment_attached_file_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='answer',
|
||||
name='comment',
|
||||
field=models.TextField(blank=True, null=True, verbose_name='Комментарий'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='answer',
|
||||
name='points',
|
||||
field=models.PositiveIntegerField(blank=True, null=True, verbose_name='Баллы'),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,29 @@
|
||||
# Generated by Django 5.1.1 on 2026-09-19 07:29
|
||||
|
||||
import ckeditor_uploader.fields
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('lms', '0006_answer_comment_answer_points'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='assignment',
|
||||
name='description',
|
||||
field=ckeditor_uploader.fields.RichTextUploadingField(blank=True, null=True, verbose_name='Описание задания'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='question',
|
||||
name='correct_answer',
|
||||
field=ckeditor_uploader.fields.RichTextUploadingField(blank=True, help_text='Оставьте пустым, если проверка ручная', null=True, verbose_name='Правильный ответ (для автопроверки)'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='question',
|
||||
name='text',
|
||||
field=ckeditor_uploader.fields.RichTextUploadingField(verbose_name='Текст задачи'),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,18 @@
|
||||
# Generated by Django 5.1.1 on 2026-09-19 07:33
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('lms', '0007_alter_assignment_description_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='question',
|
||||
name='correct_answer',
|
||||
field=models.CharField(blank=True, help_text='Оставьте пустым, если проверка ручная', max_length=255, null=True, verbose_name='Правильный ответ (для автопроверки)'),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,17 @@
|
||||
# Generated by Django 5.1.1 on 2026-09-19 07:38
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('lms', '0008_alter_question_correct_answer'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RemoveField(
|
||||
model_name='assignment',
|
||||
name='deadline',
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1 @@
|
||||
# init
|
||||
Reference in New Issue
Block a user