class Content(models.Model): module = models.ForeignKey(Module, related_name='contents') content_type = models.ForeignKey(ContentType, limit_choices_to={'model__in':('text', 'video', 'image', 'file')}) object_id = models.PositiveIntegerField() item = GenericForeignKey('content_type', 'object_id') order = OrderField(blank=True, for_fields=['module']) class Meta: ordering = ['order']
class Module(models.Model): course = models.ForeignKey(Course, related_name='modules') title = models.CharField(max_length=200) description = models.TextField(blank=True) order = OrderField(blank=True, for_fields=['course']) class Meta: ordering = ['order'] def __str__(self): return '{}. {}'.format(self.order, self.title)
class Module(models.Model): course = models.ForeignKey(Course, related_name='modules', on_delete=models.CASCADE) title = models.CharField(max_length=200) description = models.TextField(blank=True) order = OrderField(blank=True, for_fields=['course']) def __str__(self): return f'{self.order}. {self.title}' class Meta: ordering = ['order']
class Content(models.Model): # Generic relation to associate any kind of content. module = models.ForeignKey(Module, related_name='contents', on_delete=models.CASCADE) content_type = models.ForeignKey( ContentType, on_delete=models.CASCADE, limit_choices_to={'model__in': ('text', 'file', 'image', 'video')}) object_id = models.PositiveIntegerField() item = GenericForeignKey('content_type', 'object_id') order = OrderField(blank=True, for_fields=['module']) class Meta: ordering = ['order']
class Module(models.Model): # A course can have several modules course = models.ForeignKey(Course, related_name='modules', on_delete=models.CASCADE) # Custom order field order = OrderField(blank=True, for_fields=['course']) title = models.CharField(max_length=200) description = models.TextField(blank=True) class Meta: ordering = ['order'] def __str__(self): return '{}. {}'.format(self.order, self.title)
class Module(models.Model): """章节""" course = models.ForeignKey(Course, related_name="modules", on_delete=models.CASCADE) # 章节的标题 title = models.CharField(max_length=200) description = models.TextField(blank=True) order = OrderField(for_fields=["course"], blank=True) def __str__(self): return "{}.{}".format(self.order, self.title) class Meta: db_table = "module" ordering = ("order", )
class Module(models.Model): course = models.ForeignKey(Course, related_name='modules', on_delete=models.CASCADE) title = models.CharField(max_length=100) desc = models.TextField(blank=True) order = OrderField(null=True, for_fields=['course_id']) def __str__(self): return '%s.%s' % ( self.order, self.title, ) class Meta: ordering = ['order']
class Content(models.Model): module = models.ForeignKey(Module, related_name='contents', on_delete=models.CASCADE) # limit_choices_to 限定contenttype对象是这四个模型 content_type = models.ForeignKey( ContentType, on_delete=models.CASCADE, limit_choices_to={'model__in': ('text', 'file', 'image', 'video')}) object_id = models.PositiveIntegerField() # 通用的关联关系字段,通过合并content_type和object_id进行关联的 item = GenericForeignKey('content_type', 'object_id') order = OrderField(for_fields=['module'], blank=True) class Meta: db_table = 'content' ordering = ('order', )
class Module(models.Model): # 章节 course = models.ForeignKey(Course, related_name='modules', on_delete=models.CASCADE) # 章节的标题 title = models.CharField(max_length=200, verbose_name='标题') # 章节的详细介绍 description = models.TextField(blank=True) order = OrderField(for_fields=['course'], blank=True) def __str__(self): return '{}.{}'.format(self.order, self.title) class Meta: db_table = 'module' ordering = ('order', )
class Content(models.Model): """内容""" module = models.ForeignKey(Module, related_name="contents", on_delete=models.CASCADE) # limit_choices_to 限定contenttype 对象是这四个模型中 content_type = models.ForeignKey( ContentType, on_delete=models.CASCADE, limit_choices_to={"model__in": ("text", "file", "image", "video")}) object_id = models.PositiveIntegerField() # 通用的关联关系字段,通过合并content_type 和object_id 字段进行关联的 item = GenericForeignKey("content_type", "object_id") order = OrderField(for_fields=["module"], blank=True) class Meta: db_table = "content" ordering = ("order", )
class SchoolContent(models.Model): module = models.ForeignKey(SchoolModule, related_name='contents', on_delete=models.CASCADE) # Creates a link to every model content_type = models.ForeignKey( ContentType, on_delete=models.CASCADE, limit_choices_to={'model__in': ('stext', 'svideo', 'simage', 'sfile')}) # index value object_id = models.PositiveIntegerField() item = GenericForeignKey('content_type', 'object_id') order = OrderField(blank=True, for_fields=['module']) class Meta: ordering = ['order'] verbose_name = 'Content' verbose_name_plural = 'Contents'
class OpenContent(models.Model): module = models.ForeignKey(OpenModule, related_name='contents', on_delete=models.CASCADE) # Creates a link to every model content_type = models.ForeignKey( ContentType, on_delete=models.CASCADE, limit_choices_to={'model__in': ('atext', 'avideo', 'aimage', 'afile')}) # index value object_id = models.PositiveIntegerField() item = GenericForeignKey('content_type', 'object_id') order = OrderField(blank=True, for_fields=['module']) history = HistoricalRecords() def __str__(self): return self.item.title class Meta: ordering = ['order'] verbose_name = 'Content' verbose_name_plural = 'Contents'
class SchoolModule(Module): course = models.ForeignKey(SchoolCourse, related_name='modules', on_delete=models.CASCADE) order = OrderField(blank=True, for_fields=['schoolcourse']) class Meta: verbose_name = 'Module' verbose_name_plural = 'Modules' def _get_unique_slug(self): slug = slugify(self.title) unique_slug = slug num = 1 while SchoolModule.objects.filter(slug=unique_slug).exists(): unique_slug = '{}-{}'.format(slug, num) num += 1 return unique_slug def save(self, *args, **kwargs): if not self.slug: self.slug = self._get_unique_slug() super().save(*args, **kwargs)