61 lines
2.1 KiB
Python
61 lines
2.1 KiB
Python
"""
|
|
Leerplein-module: een overkoepelende groepsstructuur.
|
|
|
|
- Een Leerplein 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"},
|
|
)
|
|
aangemaakt_op = models.DateTimeField(auto_now_add=True)
|
|
|
|
class Meta:
|
|
verbose_name = "leerplein"
|
|
verbose_name_plural = "leerpleinen"
|
|
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}"
|