from django.db import models from django.utils.translation import ugettext_lazy as _ from django.utils.text import slugify from django.conf import settings from django.urls import reverse class Class(models.Model): name = models.CharField( max_length=255, ) assistants = models.ManyToManyField( settings.AUTH_USER_MODEL, verbose_name=_('Assistants'), related_name='professor_classes', blank=True, ) students = models.ManyToManyField( settings.AUTH_USER_MODEL, related_name='classes', blank=True, ) course = models.ForeignKey( 'Course', models.CASCADE, verbose_name=_('Course'), ) user_can_certificate = models.BooleanField( _('Certification Allowed'), default=True, ) user_can_certificate_even_without_progress = models.BooleanField( _('Certification Allowed Even Without Progress'), default=False, ) certificate_template = models.ForeignKey( 'certification.CertificateTemplate', models.SET_NULL, verbose_name=_('CertificateTemplate'), related_name='classes', null=True, ) def __str__(self): return u'%s @ %s' % (self.name, self.course) def get_absolute_url(self): return reverse('courses_legacy:class', kwargs={'pk': self.id}) def add_students(self, *objs): for obj in objs: try: c = Class.objects.get(course=self.course, students=obj) c.students.remove(obj) except Class.DoesNotExist: pass self.students.add(obj) def remove_students(self, *objs): for obj in objs: self.students.remove(obj) if CourseStudent.objects.filter(course=self.course, user=obj).exists(): self.course.default_class.students.add(obj) @property def get_students(self): return self.course.course_students.filter( user__in=self.students.all(), user__is_active=True ).select_related('user').order_by('user__first_name') @property def valid_students(self): return self.students.filter(is_active=True)