uchill/backend/apps/homework/migrations/0001_initial.py

376 lines
14 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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"],
},
),
]