""" Module voor bovenliggende groepen. - Een bovenliggende groep bundelt meerdere groepen en/of subgroepen, en kan daarnaast losse (individuele) leerlingen bevatten. - Een SubgroepGroep-koppeling verbindt een subgroep met een groep. De module raakt de kernmodellen niet aan; het zijn losse koppeltabellen die alleen bestaan als de module geïnstalleerd is. """ from django.db import models class Leerplein(models.Model): naam = models.CharField("naam", max_length=100, unique=True) omschrijving = models.CharField("omschrijving", max_length=255, blank=True) actief = models.BooleanField("actief", default=True) groepen = models.ManyToManyField( "core.Groep", verbose_name="groepen", related_name="leerpleinen", blank=True ) subgroepen = models.ManyToManyField( "core.Subgroep", verbose_name="subgroepen", related_name="leerpleinen", blank=True ) leerlingen = models.ManyToManyField( "core.Persoon", verbose_name="losse leerlingen", related_name="leerpleinen", blank=True, limit_choices_to={"rol": "leerling"}, ) medewerkers = models.ManyToManyField( "core.Persoon", verbose_name="medewerkers", related_name="leerpleinen_medewerker", blank=True, ) aangemaakt_op = models.DateTimeField(auto_now_add=True) class Meta: verbose_name = "bovenliggende groep" verbose_name_plural = "bovenliggende groepen" ordering = ["naam"] def __str__(self) -> str: return self.naam class SubgroepGroep(models.Model): """Koppelt een subgroep aan een groep (subgroep hoort bij groep).""" groep = models.ForeignKey( "core.Groep", on_delete=models.CASCADE, related_name="subgroep_koppelingen" ) subgroep = models.ForeignKey( "core.Subgroep", on_delete=models.CASCADE, related_name="groep_koppelingen" ) class Meta: verbose_name = "subgroep-groep-koppeling" verbose_name_plural = "subgroep-groep-koppelingen" ordering = ["groep__naam", "subgroep__naam"] constraints = [ models.UniqueConstraint( fields=["groep", "subgroep"], name="uniek_groep_subgroep" ) ] def __str__(self) -> str: return f"{self.subgroep} ↔ {self.groep}"