from rest_framework import serializers from .models import Enseignant, Specialite, Classe from N3wtSchool import settings from django.utils import timezone import pytz class SpecialiteSerializer(serializers.ModelSerializer): dateCreation_formattee = serializers.SerializerMethodField() class Meta: model = Specialite fields = '__all__' def get_dateCreation_formattee(self, obj): utc_time = timezone.localtime(obj.dateCreation) # Convertir en heure locale local_tz = pytz.timezone(settings.TZ_APPLI) local_time = utc_time.astimezone(local_tz) return local_time.strftime("%d-%m-%Y %H:%M") class ClasseSerializer(serializers.ModelSerializer): specialites = SpecialiteSerializer(many=True, read_only=True) specialites_ids = serializers.PrimaryKeyRelatedField(queryset=Specialite.objects.all(), many=True, source='specialites') dateCreation_formattee = serializers.SerializerMethodField() enseignant_principal = serializers.SerializerMethodField() enseignant_principal_id = serializers.PrimaryKeyRelatedField(queryset=Enseignant.objects.all(), source='enseignant_principal', write_only=False, read_only=False) class Meta: model = Classe fields = ['id', 'nom_ambiance', 'tranche_age', 'nombre_eleves', 'langue_enseignement', 'specialites', 'specialites_ids', 'enseignant_principal', 'enseignant_principal_id', 'annee_scolaire', 'dateCreation', 'dateCreation_formattee'] def get_enseignant_principal(self, obj): from .serializers import EnseignantDetailSerializer if obj.enseignant_principal: return EnseignantDetailSerializer(obj.enseignant_principal).data return None def create(self, validated_data): specialites_data = validated_data.pop('specialites', []) classe = Classe.objects.create(**validated_data) classe.specialites.set(specialites_data) return classe def update(self, instance, validated_data): specialites_data = validated_data.pop('specialites', []) instance.nom_ambiance = validated_data.get('nom_ambiance', instance.nom_ambiance) instance.tranche_age = validated_data.get('tranche_age', instance.tranche_age) instance.nombre_eleves = validated_data.get('nombre_eleves', instance.nombre_eleves) instance.langue_enseignement = validated_data.get('langue_enseignement', instance.langue_enseignement) instance.annee_scolaire = validated_data.get('annee_scolaire', instance.annee_scolaire) instance.enseignant_principal = validated_data.get('enseignant_principal', instance.enseignant_principal) instance.save() instance.specialites.set(specialites_data) return instance def get_dateCreation_formattee(self, obj): utc_time = timezone.localtime(obj.dateCreation) # Convertir en heure locale local_tz = pytz.timezone(settings.TZ_APPLI) local_time = utc_time.astimezone(local_tz) return local_time.strftime("%d-%m-%Y %H:%M") class EnseignantSerializer(serializers.ModelSerializer): specialite = SpecialiteSerializer(read_only=True) specialite_id = serializers.PrimaryKeyRelatedField(queryset=Specialite.objects.all(), source='specialite', write_only=False, read_only=False) classes_principal = ClasseSerializer(many=True, read_only=True) class Meta: model = Enseignant fields = ['id', 'nom', 'prenom', 'mail', 'specialite', 'specialite_id', 'classes_principal'] def create(self, validated_data): specialite = validated_data.pop('specialite', None) enseignant = Enseignant.objects.create(**validated_data) enseignant.specialite = specialite enseignant.save() return enseignant class EnseignantDetailSerializer(serializers.ModelSerializer): specialite = SpecialiteSerializer(read_only=True) class Meta: model = Enseignant fields = ['id', 'nom', 'prenom', 'mail', 'specialite']