/
servgri
/
interview
Обзор
Документация
Войти
/
servgri
/
interview
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
tasks/models.py
61 строка
2 KB
Seal
full project
27 ноя 2025, 14:24
27 ноя 2025, 14:24
d1507ba
Код
Авторство
О чём код?
from django.db import models from django.conf import settings class Topic(models.Model): name = models.CharField(max_length=20, unique=True) def __str__(self): return self.name class Task(models.Model): LEVEL_CHOICES = [ ('easy', 'Easy'), ('medium', 'Medium'), ('hard', 'Hard'), ] title = models.CharField(max_length=255) difficulty = models.CharField(max_length=10, choices=LEVEL_CHOICES, default='easy') task_text = models.TextField() test_cases = models.JSONField(default=list) ideal_solution = models.TextField(blank=False) topic = models.ForeignKey('Topic', on_delete=models.CASCADE) is_active = models.BooleanField(default=True) created_at = models.DateTimeField(auto_now_add=True) def __str__(self): return f"{self.pk} - {self.title}" class UserProgress(models.Model): user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='progress') task = models.ForeignKey(Task, on_delete=models.CASCADE) started_at = models.DateTimeField(auto_now_add=True) finished_at = models.DateTimeField(null=True, blank=True) correct = models.BooleanField(null=True) user_answer = models.TextField(null=True, blank=True) time_taken_seconds = models.IntegerField(null=True, blank=True) skipped = models.BooleanField(default=False) attempt_count = models.PositiveIntegerField(default=1) hint_used = models.BooleanField(default=False) class Meta: unique_together = ('user', 'task') class Session(models.Model): user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE) tasks = models.ManyToManyField(Task, ) report_text = models.TextField() reported_at = models.DateTimeField(auto_now_add=True) class UserBKTState(models.Model): user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name="bkt_state") # сериализуем состояние модели BKT в JSON (словарь skill->prob) state = models.JSONField(default=dict) updated_at = models.DateTimeField(auto_now=True) def __str__(self): return f"BKT state for {self.user}"