"""DRF-serializers voor het kerndomein.""" from rest_framework import serializers from .models import Groep, Persoon, Subgroep class GroepSerializer(serializers.ModelSerializer): aantal_leerlingen = serializers.IntegerField( source="leerlingen.count", read_only=True ) class Meta: model = Groep fields = [ "id", "naam", "omschrijving", "actief", "aantal_leerlingen", "aangemaakt_op", ] read_only_fields = ["aangemaakt_op"] class PersoonSerializer(serializers.ModelSerializer): volledige_naam = serializers.CharField(read_only=True) rol_label = serializers.CharField(source="get_rol_display", read_only=True) groep_naam = serializers.CharField( source="groep.naam", read_only=True, default=None ) class Meta: model = Persoon fields = [ "id", "voornaam", "achternaam", "volledige_naam", "rol", "rol_label", "groep", "groep_naam", "actief", "opmerkingen", "aangemaakt_op", ] read_only_fields = ["aangemaakt_op"] class SubgroepSerializer(serializers.ModelSerializer): # Lezen: namen tonen. Schrijven: lijst met leerling-id's. leden = serializers.PrimaryKeyRelatedField( many=True, queryset=Persoon.objects.filter(rol="leerling"), required=False ) leden_namen = serializers.SerializerMethodField() aantal_leden = serializers.SerializerMethodField() class Meta: model = Subgroep fields = [ "id", "naam", "omschrijving", "actief", "leden", "leden_namen", "aantal_leden", "aangemaakt_op", ] read_only_fields = ["aangemaakt_op"] def get_leden_namen(self, obj): return [ {"id": p.id, "naam": p.volledige_naam} for p in obj.leden.all() ] def get_aantal_leden(self, obj): return obj.leden.count()