Моделирование платформы электронного обучения Django

Я делаю веб-приложение/блог для электронного обучения и у меня есть 2 модели: Курсы и Главы, так что очевидно, что курс может иметь несколько глав, но что я хочу сделать, допустим, у меня есть курс с 12 главами, я хочу сгруппировать главы в части без создания другой модели пример:

Курс: Exemple_Course

>
  • Часть 01: 5 глав
  • Часть 02: 5 глав
  • Часть 03: 2 главы

вот мой код :

class Article(models.Model):


    author = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        on_delete=models.CASCADE,
        null=True,
        blank=True
    )
    title         = models.CharField(max_length=120)
    description   = models.TextField()
    slug          = models.SlugField(blank=True,null=True,)
    date          =  models.DateTimeField( auto_now_add = True)
    allowed_subscription = models.ManyToManyField(Plan,blank=True, null=True,)

    def __str__(self):
         return self.title

    def get_absolute_url(self):
        return reverse('articles:article-detail', kwargs={'article_slug': self.slug})


def pre_save_receiver(sender, instance, *args, **kwargs):
    if not instance.slug:
        instance.slug = unique_slug_generator(instance)



pre_save.connect(pre_save_receiver, sender=Article)




CHAPTER_TYPES = (
        ('CHAPTER', 'Chapter'),
        ('SUB_CHAPTER', 'Sub chapter'),
       
    )


class Chapter(models.Model):
    title = models.CharField(max_length=100)
    slug          = models.SlugField(blank=True,null=True,)
    article = models.ForeignKey(Article,on_delete=models.CASCADE,null=True,blank=True,)
    content  = models.TextField()
    chapter_type  = models.CharField(max_length=256, choices=CHAPTER_TYPES)

    def __str__(self):
         return self.title
    

    def get_absolute_url(self):
        return reverse('articles:chapter-detail', kwargs={'article_slug': self.article.slug,'chapter_slug': self.slug,})



pre_save.connect(pre_save_receiver, sender=Chapter)

Хотя имеет смысл сделать другую модель, другой способ справиться с этим - добавить еще одно поле "part" в вашу модель, иметь общий ключ для ваших курсов (например, name) и создать ограничение unique_together.

Делая это, вы логически создаете "составной первичный ключ" для ваших моделей (являющийся (имя_курса, часть).

Вернуться на верх