49 lines
1.4 KiB
Python
49 lines
1.4 KiB
Python
from django.db import models
|
|
|
|
from account.models import User
|
|
|
|
|
|
class TutorialType(models.TextChoices):
|
|
PYTHON = "python", "Python"
|
|
C = "c", "C"
|
|
|
|
|
|
class ExerciseType(models.TextChoices):
|
|
MCQ = "mcq", "选择题"
|
|
SORT = "sort", "代码排序"
|
|
FILL = "fill", "代码填空"
|
|
|
|
|
|
class Tutorial(models.Model):
|
|
title = models.CharField(max_length=128)
|
|
content = models.TextField()
|
|
code = models.TextField(null=True, blank=True)
|
|
type = models.CharField(max_length=10, choices=TutorialType.choices, default=TutorialType.PYTHON)
|
|
created_by = models.ForeignKey(User, on_delete=models.CASCADE)
|
|
created_at = models.DateTimeField(auto_now_add=True)
|
|
updated_at = models.DateTimeField(auto_now=True)
|
|
is_public = models.BooleanField(default=False)
|
|
order = models.IntegerField(default=0)
|
|
|
|
class Meta:
|
|
db_table = "tutorial"
|
|
ordering = ["order", "-created_at"]
|
|
|
|
def __str__(self):
|
|
return self.title
|
|
|
|
|
|
class Exercise(models.Model):
|
|
tutorial = models.ForeignKey(Tutorial, on_delete=models.CASCADE, related_name="exercises")
|
|
type = models.CharField(max_length=16, choices=ExerciseType.choices)
|
|
data = models.JSONField()
|
|
order = models.IntegerField(default=0)
|
|
created_at = models.DateTimeField(auto_now_add=True)
|
|
|
|
class Meta:
|
|
db_table = "exercise"
|
|
ordering = ["order", "created_at"]
|
|
|
|
def __str__(self):
|
|
return f"{self.get_type_display()} (Order {self.order})"
|