Я работаю над системой управления контентом, в которой пользователь может создать курс для прохождения студентом.
Пока в моей базе данных есть модели курсов, уроков и слайдов, и я хочу подключить свой слайдмодель для викторины, HTML или видео:
class Course(models.Model):
company = models.ForeignKey(Company, on_delete=models.CASCADE)
slug = models.SlugField(max_length=40, unique=True)
name = models.CharField(max_length=100)
desc = models.CharField(max_length=1000)
date_created = models.DateTimeField(default=datetime.now, blank=True)
last_updated = models.DateTimeField(default=datetime.now, blank=True)
price = models.DecimalField(max_digits=8, decimal_places=2)
is_visible = models.BooleanField(default=True)
def __str__ (self):
return self.name
class Lesson(models.Model):
course = models.ForeignKey(Course, on_delete=models.CASCADE)
name = models.CharField(max_length=100)
order = models.IntegerField()
def __str__ (self):
return self.name
class Quiz(models.Model):
points = models.IntegerField()
# Link to quiz model
class HTML(models.Model):
content = models.TextField(blank=True)
class Video(models.Model):
media_path = models.CharField(max_length=150)
class Slide(models.Model):
lesson = models.ForeignKey(Lesson, on_delete=models.CASCADE)
title = models.CharField(max_length=100)
slide_type = models.CharField(max_length=100, choices=[("video", "Video"),("image", "Image"), ("text", "Text"), ("quiz", "Quiz")])
notes = models.TextField(blank=True)
last_updated = models.DateTimeField(default=datetime.now, blank=True)
content = models.TextField(blank=True)
reference = models.CharField(max_length=150, blank=True)
def __str__ (self):
return self.title
class QuizQuestions(models.Model):
quiz = models.ForeignKey(Quiz, on_delete=models.CASCADE)
question = models.TextField()
points = models.IntegerField()
Теперь моя модель слайда может быть 1 из 3 вещей:
- Текст (необработанный HTML)
- Видео
- Тест
Как мне спроектировать модель слайдов базы данных, чтобы она могла быть ссылкой на видео, HTML или викторину?
Мои мысли:
- Я мог бы создать путь к модулю в Slide, и путь был бы соединяющим текстом, был бы базой данных соединений и внешним ключом к нему
- Каким-то образом создайте внешний ключ, который подключается к любой из других таблиц базы данных.
Дайте мне знать, если у вас есть идеи получше, я бы хотел масштабируемое решение, и я открыт для новых идей.