from django.db import models from django.utils.translation import gettext_lazy as _ class Course(models.Model): LICENSE_FREE = 0 LICENSE_VIP = 1 title = models.CharField(max_length=128) description = models.TextField(default='') objectives = models.TextField(default='') propaedeutics = models.TextField(default='') references = models.TextField(default='') slug = models.SlugField(unique=True, blank=False, null=False, allow_unicode=True) category = models.ForeignKey( 'university.Category', on_delete=models.PROTECT, null=True, blank=True) cover_image = models.ForeignKey('university.Upload', on_delete=models.PROTECT) online_exam = models.ForeignKey( 'university.OnlineExam', on_delete=models.PROTECT, blank=True, null=True) visable_when_no_perm = models.BooleanField(default=True) license = models.SmallIntegerField( choices=( (LICENSE_FREE, _('free')), (LICENSE_VIP, _('vip')) ), default=LICENSE_FREE) class Meta: db_table = 'courses' def __str__(self): return self.title @property def speakers(self): speakers = self.chapter_set.all().values_list('lesson__speaker', flat=True) # exclude some `None` value # when chapter has no lessons, it returns `None` but not empty list speakers = list(set(filter(lambda i: i, speakers))) if speakers: return ','.join(list(speakers)[:3]) + '...' else: return ''