roosterwijs/backend/modules/leerplein/models.py

65 lines
2.2 KiB
Python

"""
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}"