376 lines
14 KiB
Python
376 lines
14 KiB
Python
# Generated by Django 4.2.7 on 2025-12-09 21:02
|
||
|
||
import apps.homework.models
|
||
from django.conf import settings
|
||
import django.core.validators
|
||
from django.db import migrations, models
|
||
import django.db.models.deletion
|
||
|
||
|
||
class Migration(migrations.Migration):
|
||
initial = True
|
||
|
||
dependencies = [
|
||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||
]
|
||
|
||
operations = [
|
||
migrations.CreateModel(
|
||
name="Homework",
|
||
fields=[
|
||
(
|
||
"id",
|
||
models.BigAutoField(
|
||
auto_created=True,
|
||
primary_key=True,
|
||
serialize=False,
|
||
verbose_name="ID",
|
||
),
|
||
),
|
||
("title", models.CharField(max_length=255, verbose_name="Название")),
|
||
("description", models.TextField(verbose_name="Описание задания")),
|
||
(
|
||
"attachment",
|
||
models.FileField(
|
||
blank=True,
|
||
max_length=500,
|
||
upload_to=apps.homework.models.homework_file_upload_path,
|
||
verbose_name="Файл задания",
|
||
),
|
||
),
|
||
(
|
||
"attachment_url",
|
||
models.URLField(
|
||
blank=True, max_length=500, verbose_name="Ссылка на материал"
|
||
),
|
||
),
|
||
(
|
||
"deadline",
|
||
models.DateTimeField(
|
||
blank=True, db_index=True, null=True, verbose_name="Дедлайн"
|
||
),
|
||
),
|
||
(
|
||
"max_score",
|
||
models.IntegerField(
|
||
default=100,
|
||
validators=[django.core.validators.MinValueValidator(0)],
|
||
verbose_name="Максимальный балл",
|
||
),
|
||
),
|
||
(
|
||
"passing_score",
|
||
models.IntegerField(
|
||
default=60,
|
||
validators=[django.core.validators.MinValueValidator(0)],
|
||
verbose_name="Проходной балл",
|
||
),
|
||
),
|
||
(
|
||
"allow_late_submission",
|
||
models.BooleanField(
|
||
default=False, verbose_name="Разрешить сдачу после дедлайна"
|
||
),
|
||
),
|
||
(
|
||
"auto_check_enabled",
|
||
models.BooleanField(
|
||
default=False, verbose_name="Автоматическая проверка"
|
||
),
|
||
),
|
||
(
|
||
"ai_check_enabled",
|
||
models.BooleanField(default=False, verbose_name="AI проверка"),
|
||
),
|
||
(
|
||
"requires_file",
|
||
models.BooleanField(default=True, verbose_name="Требуется файл"),
|
||
),
|
||
(
|
||
"allowed_file_types",
|
||
models.CharField(
|
||
default=".pdf,.doc,.docx,.txt,.jpg,.png",
|
||
max_length=255,
|
||
verbose_name="Разрешенные типы файлов",
|
||
),
|
||
),
|
||
(
|
||
"max_file_size",
|
||
models.IntegerField(
|
||
default=10485760,
|
||
verbose_name="Максимальный размер файла (bytes)",
|
||
),
|
||
),
|
||
(
|
||
"status",
|
||
models.CharField(
|
||
choices=[
|
||
("draft", "Черновик"),
|
||
("published", "Опубликовано"),
|
||
("archived", "В архиве"),
|
||
],
|
||
db_index=True,
|
||
default="draft",
|
||
max_length=20,
|
||
verbose_name="Статус",
|
||
),
|
||
),
|
||
(
|
||
"total_submissions",
|
||
models.IntegerField(default=0, verbose_name="Всего решений"),
|
||
),
|
||
(
|
||
"checked_submissions",
|
||
models.IntegerField(default=0, verbose_name="Проверено решений"),
|
||
),
|
||
(
|
||
"average_score",
|
||
models.FloatField(default=0.0, verbose_name="Средний балл"),
|
||
),
|
||
(
|
||
"created_at",
|
||
models.DateTimeField(
|
||
auto_now_add=True, verbose_name="Дата создания"
|
||
),
|
||
),
|
||
(
|
||
"updated_at",
|
||
models.DateTimeField(auto_now=True, verbose_name="Дата обновления"),
|
||
),
|
||
(
|
||
"published_at",
|
||
models.DateTimeField(
|
||
blank=True, null=True, verbose_name="Дата публикации"
|
||
),
|
||
),
|
||
(
|
||
"assigned_to",
|
||
models.ManyToManyField(
|
||
blank=True,
|
||
related_name="assigned_homeworks",
|
||
to=settings.AUTH_USER_MODEL,
|
||
verbose_name="Назначено",
|
||
),
|
||
),
|
||
],
|
||
options={
|
||
"verbose_name": "Домашнее задание",
|
||
"verbose_name_plural": "Домашние задания",
|
||
"db_table": "homeworks",
|
||
"ordering": ["-created_at"],
|
||
},
|
||
),
|
||
migrations.CreateModel(
|
||
name="HomeworkSubmission",
|
||
fields=[
|
||
(
|
||
"id",
|
||
models.BigAutoField(
|
||
auto_created=True,
|
||
primary_key=True,
|
||
serialize=False,
|
||
verbose_name="ID",
|
||
),
|
||
),
|
||
("content", models.TextField(blank=True, verbose_name="Текст решения")),
|
||
(
|
||
"attachment",
|
||
models.FileField(
|
||
blank=True,
|
||
max_length=500,
|
||
upload_to=apps.homework.models.submission_file_upload_path,
|
||
verbose_name="Файл решения",
|
||
),
|
||
),
|
||
(
|
||
"attachment_url",
|
||
models.URLField(
|
||
blank=True, max_length=500, verbose_name="Ссылка на решение"
|
||
),
|
||
),
|
||
(
|
||
"status",
|
||
models.CharField(
|
||
choices=[
|
||
("pending", "Ожидает проверки"),
|
||
("checking", "На проверке"),
|
||
("graded", "Проверено"),
|
||
("returned", "Возвращено на доработку"),
|
||
],
|
||
db_index=True,
|
||
default="pending",
|
||
max_length=20,
|
||
verbose_name="Статус",
|
||
),
|
||
),
|
||
(
|
||
"score",
|
||
models.IntegerField(
|
||
blank=True,
|
||
null=True,
|
||
validators=[django.core.validators.MinValueValidator(0)],
|
||
verbose_name="Балл",
|
||
),
|
||
),
|
||
("passed", models.BooleanField(default=False, verbose_name="Сдано")),
|
||
("feedback", models.TextField(blank=True, verbose_name="Отзыв")),
|
||
(
|
||
"checked_at",
|
||
models.DateTimeField(
|
||
blank=True, null=True, verbose_name="Дата проверки"
|
||
),
|
||
),
|
||
(
|
||
"ai_score",
|
||
models.IntegerField(blank=True, null=True, verbose_name="AI балл"),
|
||
),
|
||
("ai_feedback", models.TextField(blank=True, verbose_name="AI отзыв")),
|
||
(
|
||
"ai_checked_at",
|
||
models.DateTimeField(
|
||
blank=True, null=True, verbose_name="Дата AI проверки"
|
||
),
|
||
),
|
||
(
|
||
"attempt_number",
|
||
models.IntegerField(default=1, verbose_name="Номер попытки"),
|
||
),
|
||
(
|
||
"is_late",
|
||
models.BooleanField(
|
||
default=False, verbose_name="Сдано с опозданием"
|
||
),
|
||
),
|
||
(
|
||
"submitted_at",
|
||
models.DateTimeField(
|
||
auto_now_add=True, verbose_name="Дата отправки"
|
||
),
|
||
),
|
||
(
|
||
"updated_at",
|
||
models.DateTimeField(auto_now=True, verbose_name="Дата обновления"),
|
||
),
|
||
(
|
||
"checked_by",
|
||
models.ForeignKey(
|
||
blank=True,
|
||
null=True,
|
||
on_delete=django.db.models.deletion.SET_NULL,
|
||
related_name="checked_submissions",
|
||
to=settings.AUTH_USER_MODEL,
|
||
verbose_name="Проверил",
|
||
),
|
||
),
|
||
(
|
||
"homework",
|
||
models.ForeignKey(
|
||
on_delete=django.db.models.deletion.CASCADE,
|
||
related_name="submissions",
|
||
to="homework.homework",
|
||
verbose_name="Домашнее задание",
|
||
),
|
||
),
|
||
(
|
||
"student",
|
||
models.ForeignKey(
|
||
on_delete=django.db.models.deletion.CASCADE,
|
||
related_name="homework_submissions",
|
||
to=settings.AUTH_USER_MODEL,
|
||
verbose_name="Студент",
|
||
),
|
||
),
|
||
],
|
||
options={
|
||
"verbose_name": "Решение ДЗ",
|
||
"verbose_name_plural": "Решения ДЗ",
|
||
"db_table": "homework_submissions",
|
||
"ordering": ["-submitted_at"],
|
||
},
|
||
),
|
||
migrations.CreateModel(
|
||
name="HomeworkFile",
|
||
fields=[
|
||
(
|
||
"id",
|
||
models.BigAutoField(
|
||
auto_created=True,
|
||
primary_key=True,
|
||
serialize=False,
|
||
verbose_name="ID",
|
||
),
|
||
),
|
||
(
|
||
"file_type",
|
||
models.CharField(
|
||
choices=[
|
||
("assignment", "Файл задания"),
|
||
("submission", "Файл решения"),
|
||
("feedback", "Файл отзыва"),
|
||
],
|
||
max_length=20,
|
||
verbose_name="Тип файла",
|
||
),
|
||
),
|
||
(
|
||
"file",
|
||
models.FileField(
|
||
max_length=500, upload_to="homework/files/", verbose_name="Файл"
|
||
),
|
||
),
|
||
(
|
||
"filename",
|
||
models.CharField(max_length=255, verbose_name="Название файла"),
|
||
),
|
||
(
|
||
"file_size",
|
||
models.BigIntegerField(verbose_name="Размер файла (bytes)"),
|
||
),
|
||
(
|
||
"created_at",
|
||
models.DateTimeField(
|
||
auto_now_add=True, verbose_name="Дата загрузки"
|
||
),
|
||
),
|
||
(
|
||
"homework",
|
||
models.ForeignKey(
|
||
blank=True,
|
||
null=True,
|
||
on_delete=django.db.models.deletion.CASCADE,
|
||
related_name="files",
|
||
to="homework.homework",
|
||
verbose_name="Домашнее задание",
|
||
),
|
||
),
|
||
(
|
||
"submission",
|
||
models.ForeignKey(
|
||
blank=True,
|
||
null=True,
|
||
on_delete=django.db.models.deletion.CASCADE,
|
||
related_name="files",
|
||
to="homework.homeworksubmission",
|
||
verbose_name="Решение",
|
||
),
|
||
),
|
||
(
|
||
"uploaded_by",
|
||
models.ForeignKey(
|
||
null=True,
|
||
on_delete=django.db.models.deletion.SET_NULL,
|
||
related_name="uploaded_homework_files",
|
||
to=settings.AUTH_USER_MODEL,
|
||
verbose_name="Загрузил",
|
||
),
|
||
),
|
||
],
|
||
options={
|
||
"verbose_name": "Файл ДЗ",
|
||
"verbose_name_plural": "Файлы ДЗ",
|
||
"db_table": "homework_files",
|
||
"ordering": ["-created_at"],
|
||
},
|
||
),
|
||
]
|