from django.contrib.auth import get_user_model from django.db import models from books.models import Module from users.models import SchoolClass class ObjectiveGroup(models.Model): class Meta: verbose_name = 'Lernzielgruppe' verbose_name_plural = 'Lernzielgruppen' LANGUAGE_COMMUNICATION = 'language_communication' SOCIETY = 'society' TITLE_CHOICES = ( (LANGUAGE_COMMUNICATION, 'Sprache & Kommunikation'), (SOCIETY, 'Gesellschaft'), ) title = models.CharField('title', blank=True, null=False, max_length=255, choices=TITLE_CHOICES, default=LANGUAGE_COMMUNICATION) module = models.ForeignKey(Module, blank=False, null=False, on_delete=models.CASCADE, related_name='objective_groups') # a user can define her own objectives, hence this optional param owner = models.ForeignKey(get_user_model(), blank=True, null=True, on_delete=models.CASCADE) hidden_for = models.ManyToManyField(SchoolClass, related_name='hidden_objective_groups', blank=True) visible_for = models.ManyToManyField(SchoolClass, related_name='visible_objective_groups', blank=True) def __str__(self): return '{} - {}'.format(self.module, self.title) class Objective(models.Model): class Meta: verbose_name = 'Lernziel' verbose_name_plural = 'Lernziele' text = models.CharField('text', blank=True, null=False, max_length=255) group = models.ForeignKey(ObjectiveGroup, blank=False, null=False, on_delete=models.CASCADE, related_name='objectives') owner = models.ForeignKey(get_user_model(), blank=True, null=True, on_delete=models.CASCADE) hidden_for = models.ManyToManyField(SchoolClass, related_name='hidden_objectives', blank=True) visible_for = models.ManyToManyField(SchoolClass, related_name='visible_objectives', blank=True) def __str__(self): return 'Objective {}-{}'.format(self.id, self.text) class ObjectiveProgressStatus(models.Model): class Meta: verbose_name = 'Lernzielstatus' verbose_name_plural = 'Lernzielstatus' done = models.BooleanField('Lernziel erledigt?', default=False) objective = models.ForeignKey(Objective, blank=False, null=False, on_delete=models.CASCADE, related_name='objective_progress') user = models.ForeignKey(get_user_model(), blank=True, null=True, on_delete=models.CASCADE) def __str__(self): return 'Lernzielstatus {}-{}'.format(self.objective, self.done)