refactor: Partie "School"

This commit is contained in:
N3WT DE COMPET
2025-01-12 13:18:34 +01:00
parent 83f4d67a6f
commit 58fe509734
7 changed files with 139 additions and 182 deletions

View File

@ -90,6 +90,9 @@ class ProfileView(APIView):
return JsonResponse(profil_serializer.errors, safe=False) return JsonResponse(profil_serializer.errors, safe=False)
def delete(self, request, _id):
return bdd.delete_object(Profile, _id)
def infoSession(request): def infoSession(request):
profilCache = cache.get('session_cache') profilCache = cache.get('session_cache')
if profilCache: if profilCache:

View File

@ -1,5 +1,7 @@
import logging import logging
from django.db.models import Q from django.db.models import Q
from django.http import JsonResponse
from django.core.exceptions import ObjectDoesNotExist
from Subscriptions.models import RegistrationForm, Profile, Student from Subscriptions.models import RegistrationForm, Profile, Student
logger = logging.getLogger('N3wtSchool') logger = logging.getLogger('N3wtSchool')
@ -86,3 +88,20 @@ def searchObjects(_objectName, _searchTerm=None, _excludeStates=None):
except _objectName.DoesNotExist: except _objectName.DoesNotExist:
logging.error(f"Aucun résultat n'a été trouvé - {_objectName.__name__} (recherche: {_searchTerm})") logging.error(f"Aucun résultat n'a été trouvé - {_objectName.__name__} (recherche: {_searchTerm})")
return None return None
def delete_object(model_class, object_id, related_field=None):
try:
obj = model_class.objects.get(id=object_id)
if related_field and hasattr(obj, related_field):
related_obj = getattr(obj, related_field)
if related_obj:
related_obj.delete()
obj_name = str(obj) # Utiliser la méthode __str__
obj.delete()
return JsonResponse({'message': f'La suppression de l\'objet {obj_name} a été effectuée avec succès'}, safe=False)
except ObjectDoesNotExist:
return JsonResponse({'error': f'L\'objet {model_class.__name__} n\'existe pas avec cet ID'}, status=404, safe=False)
except Exception as e:
return JsonResponse({'error': f'Une erreur est survenue : {str(e)}'}, status=500, safe=False)

View File

@ -4,7 +4,7 @@ from django.db.models.signals import post_migrate
def create_speciality(sender, **kwargs): def create_speciality(sender, **kwargs):
from .models import Speciality from .models import Speciality
if not Speciality.objects.filter(name='GROUPE').exists(): if not Speciality.objects.filter(name='GROUPE').exists():
Speciality.objects.create(name='GROUPE', colorCode='#FF0000') Speciality.objects.create(name='GROUPE', color_code='#FF0000')
class SchoolConfig(AppConfig): class SchoolConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField' default_auto_field = 'django.db.models.BigAutoField'

View File

@ -18,22 +18,22 @@ LEVEL_CHOICES = [
class Speciality(models.Model): class Speciality(models.Model):
name = models.CharField(max_length=100) name = models.CharField(max_length=100)
updatedDate = models.DateTimeField(auto_now=True) updated_date = models.DateTimeField(auto_now=True)
colorCode = models.CharField(max_length=7, default='#FFFFFF') color_code = models.CharField(max_length=7, default='#FFFFFF')
def __str__(self): def __str__(self):
return self.name return self.name
class Teacher(models.Model): class Teacher(models.Model):
lastName = models.CharField(max_length=100) last_name = models.CharField(max_length=100)
firstName = models.CharField(max_length=100) first_name = models.CharField(max_length=100)
email = models.EmailField(unique=True) email = models.EmailField(unique=True)
specialities = models.ManyToManyField(Speciality, related_name='teachers') specialities = models.ManyToManyField(Speciality, blank=True)
associatedProfile = models.ForeignKey(Profile, on_delete=models.CASCADE, null=True, blank=True) associated_profile = models.ForeignKey(Profile, on_delete=models.CASCADE, null=True, blank=True)
updatedDate = models.DateTimeField(auto_now=True) updated_date = models.DateTimeField(auto_now=True)
def __str__(self): def __str__(self):
return f"{self.lastName} {self.firstName}" return f"{self.last_name} {self.first_name}"
class SchoolClass(models.Model): class SchoolClass(models.Model):
PLANNING_TYPE_CHOICES = [ PLANNING_TYPE_CHOICES = [
@ -42,25 +42,25 @@ class SchoolClass(models.Model):
(3, 'Trimestriel') (3, 'Trimestriel')
] ]
atmosphereName = models.CharField(max_length=255, null=True, blank=True) atmosphere_name = models.CharField(max_length=255, null=True, blank=True)
ageGroup = models.JSONField() age_range = models.JSONField(blank=True)
numberOfStudents = models.PositiveIntegerField() number_of_students = models.PositiveIntegerField(blank=True)
teachingLanguage = models.CharField(max_length=255) teaching_language = models.CharField(max_length=255, blank=True)
schoolYear = models.CharField(max_length=9) school_year = models.CharField(max_length=9, blank=True)
updatedDate = models.DateTimeField(auto_now_add=True) updated_date = models.DateTimeField(auto_now_add=True)
teachers = models.ManyToManyField(Teacher, related_name='schoolClasses') teachers = models.ManyToManyField(Teacher, blank=True)
levels = ArrayField(models.IntegerField(choices=LEVEL_CHOICES), default=list) levels = ArrayField(models.IntegerField(choices=LEVEL_CHOICES), default=list)
type = models.IntegerField(choices=PLANNING_TYPE_CHOICES, default=1) type = models.IntegerField(choices=PLANNING_TYPE_CHOICES, default=1)
schedule = models.JSONField(default=list) time_range = models.JSONField(default=list)
openingDays = ArrayField(models.IntegerField(), default=list) opening_days = ArrayField(models.IntegerField(), default=list)
def __str__(self): def __str__(self):
return self.atmosphereName return self.atmosphere_name
class Planning(models.Model): class Planning(models.Model):
level = models.IntegerField(choices=LEVEL_CHOICES, null=True, blank=True) level = models.IntegerField(choices=LEVEL_CHOICES, null=True, blank=True)
classModel = models.ForeignKey(SchoolClass, null=True, blank=True, related_name='plannings', on_delete=models.CASCADE) school_class = models.ForeignKey(SchoolClass, null=True, blank=True, related_name='plannings', on_delete=models.CASCADE)
schedule = JSONField(default=dict) schedule = JSONField(default=dict)
def __str__(self): def __str__(self):
return f'Planning for {self.level} of {self.classModel.atmosphereName}' return f'Planning for {self.level} of {self.school_class.atmosphere_name}'

View File

@ -9,14 +9,14 @@ from django.utils import timezone
import pytz import pytz
class SpecialitySerializer(serializers.ModelSerializer): class SpecialitySerializer(serializers.ModelSerializer):
creationDateFormatted = serializers.SerializerMethodField() updated_date_formatted = serializers.SerializerMethodField()
class Meta: class Meta:
model = Speciality model = Speciality
fields = '__all__' fields = '__all__'
def get_creationDateFormatted(self, obj): def get_updated_date_formatted(self, obj):
utc_time = timezone.localtime(obj.updatedDate) # Convert to local time utc_time = timezone.localtime(obj.updated_date) # Convert to local time
local_tz = pytz.timezone(settings.TZ_APPLI) local_tz = pytz.timezone(settings.TZ_APPLI)
local_time = utc_time.astimezone(local_tz) local_time = utc_time.astimezone(local_tz)
@ -27,52 +27,44 @@ class TeacherDetailSerializer(serializers.ModelSerializer):
class Meta: class Meta:
model = Teacher model = Teacher
fields = ['id', 'lastName', 'firstName', 'email', 'specialities'] fields = ['id', 'last_name', 'first_name', 'email', 'specialities']
class TeacherSerializer(serializers.ModelSerializer): class TeacherSerializer(serializers.ModelSerializer):
specialities = SpecialitySerializer(many=True, read_only=True) specialities = serializers.PrimaryKeyRelatedField(queryset=Speciality.objects.all(), many=True, required=False)
specialties_ids = serializers.PrimaryKeyRelatedField(queryset=Speciality.objects.all(), many=True, source='specialities') associated_profile = serializers.PrimaryKeyRelatedField(queryset=Profile.objects.all(), required=True)
associatedProfile_id = serializers.PrimaryKeyRelatedField(queryset=Profile.objects.all(), source='associatedProfile', write_only=False, read_only=False) updated_date_formatted = serializers.SerializerMethodField()
mainClasses = serializers.PrimaryKeyRelatedField(many=True, read_only=True, source='schoolClasses')
associatedProfile = ProfileSerializer(read_only=True)
rightLabel = serializers.SerializerMethodField()
rightValue = serializers.SerializerMethodField()
creationDateFormatted = serializers.SerializerMethodField()
class Meta: class Meta:
model = Teacher model = Teacher
fields = ['id', 'lastName', 'firstName', 'email', 'specialities', 'specialties_ids', 'mainClasses', 'associatedProfile', 'associatedProfile_id', 'rightLabel', 'rightValue', 'updatedDate', 'creationDateFormatted'] fields = '__all__'
def create(self, validated_data): def create(self, validated_data):
specialties_data = validated_data.pop('specialities', None) specialities_data = validated_data.pop('specialities', None)
associatedProfile = validated_data.pop('associatedProfile', None) associated_profile = validated_data.pop('associated_profile', None)
teacher = Teacher.objects.create(**validated_data) teacher = Teacher.objects.create(**validated_data)
teacher.specialities.set(specialties_data) if specialities_data:
if associatedProfile: teacher.specialities.set(specialities_data)
teacher.associatedProfile = associatedProfile if associated_profile:
teacher.associated_profile = associated_profile
teacher.save() teacher.save()
return teacher return teacher
def update(self, instance, validated_data): def update(self, instance, validated_data):
specialties_data = validated_data.pop('specialities', []) specialities_data = validated_data.pop('specialities', [])
instance.lastName = validated_data.get('lastName', instance.lastName) instance.last_name = validated_data.get('last_name', instance.last_name)
instance.firstName = validated_data.get('firstName', instance.firstName) instance.first_name = validated_data.get('first_name', instance.first_name)
instance.email = validated_data.get('email', instance.email) instance.email = validated_data.get('email', instance.email)
instance.associatedProfile = validated_data.get('associatedProfile', instance.associatedProfile) instance.associated_profile = validated_data.get('associated_profile', instance.associated_profile)
instance.save() instance.save()
instance.specialities.set(specialties_data) if specialities_data:
instance.specialities.set(specialities_data)
return instance return instance
def get_rightLabel(self, obj): def get_updated_date_formatted(self, obj):
return obj.associatedProfile.get_right_display() if obj.associatedProfile else None utc_time = timezone.localtime(obj.updated_date) # Convert to local time
def get_rightValue(self, obj):
return obj.associatedProfile.right if obj.associatedProfile else None
def get_creationDateFormatted(self, obj):
utc_time = timezone.localtime(obj.updatedDate) # Convert to local time
local_tz = pytz.timezone(settings.TZ_APPLI) local_tz = pytz.timezone(settings.TZ_APPLI)
local_time = utc_time.astimezone(local_tz) local_time = utc_time.astimezone(local_tz)
return local_time.strftime("%d-%m-%Y %H:%M") return local_time.strftime("%d-%m-%Y %H:%M")
class PlanningSerializer(serializers.ModelSerializer): class PlanningSerializer(serializers.ModelSerializer):
@ -86,65 +78,55 @@ class PlanningSerializer(serializers.ModelSerializer):
return internal_value return internal_value
class SchoolClassSerializer(serializers.ModelSerializer): class SchoolClassSerializer(serializers.ModelSerializer):
creationDateFormatted = serializers.SerializerMethodField() updated_date_formatted = serializers.SerializerMethodField()
teachers = TeacherSerializer(many=True, read_only=True) teachers = serializers.PrimaryKeyRelatedField(queryset=Teacher.objects.all(), many=True, required=False)
teachers_ids = serializers.PrimaryKeyRelatedField(queryset=Teacher.objects.all(), many=True, source='teachers')
students = serializers.SerializerMethodField()
levels = serializers.ListField(child=serializers.ChoiceField(choices=LEVEL_CHOICES))
plannings_read = serializers.SerializerMethodField()
plannings = PlanningSerializer(many=True, write_only=True)
class Meta: class Meta:
model = SchoolClass model = SchoolClass
fields = [ fields = '__all__'
'id', 'atmosphereName', 'ageGroup', 'numberOfStudents', 'teachingLanguage',
'teachers', 'teachers_ids', 'schoolYear', 'updatedDate',
'creationDateFormatted', 'students', 'levels', 'type', 'schedule',
'openingDays', 'plannings', 'plannings_read'
]
def create(self, validated_data): def create(self, validated_data):
teachers_data = validated_data.pop('teachers', []) teachers_data = validated_data.pop('teachers', [])
levels_data = validated_data.pop('levels', []) levels_data = validated_data.pop('levels', [])
plannings_data = validated_data.pop('plannings', []) plannings_data = validated_data.pop('plannings', [])
classModel = SchoolClass.objects.create( school_class = SchoolClass.objects.create(
atmosphereName=validated_data.get('atmosphereName', ''), atmosphere_name=validated_data.get('atmosphere_name', ''),
ageGroup=validated_data.get('ageGroup', []), age_range=validated_data.get('age_range', []),
numberOfStudents=validated_data.get('numberOfStudents', 0), number_of_students=validated_data.get('number_of_students', 0),
teachingLanguage=validated_data.get('teachingLanguage', ''), teaching_language=validated_data.get('teaching_language', ''),
schoolYear=validated_data.get('schoolYear', ''), school_year=validated_data.get('school_year', ''),
levels=levels_data, levels=levels_data,
type=validated_data.get('type', 1), # Added here type=validated_data.get('type', 1), # Added here
schedule=validated_data.get('schedule', ['08:30', '17:30']), # Added here time_range=validated_data.get('time_range', ['08:30', '17:30']), # Added here
openingDays=validated_data.get('openingDays', [1, 2, 4, 5]) # Added here opening_days=validated_data.get('opening_days', [1, 2, 4, 5]) # Added here
) )
classModel.teachers.set(teachers_data) school_class.teachers.set(teachers_data)
for planning_data in plannings_data: for planning_data in plannings_data:
Planning.objects.create( Planning.objects.create(
classModel=classModel, school_class=school_class,
level=planning_data['level'], level=planning_data['level'],
schedule=planning_data.get('schedule', {}) schedule=planning_data.get('schedule', {})
) )
return classModel return school_class
def update(self, instance, validated_data): def update(self, instance, validated_data):
teachers_data = validated_data.pop('teachers', []) teachers_data = validated_data.pop('teachers', [])
levels_data = validated_data.pop('levels', []) levels_data = validated_data.pop('levels', [])
plannings_data = validated_data.pop('plannings', []) plannings_data = validated_data.pop('plannings', [])
instance.atmosphereName = validated_data.get('atmosphereName', instance.atmosphereName) instance.atmosphere_name = validated_data.get('atmosphere_name', instance.atmosphere_name)
instance.ageGroup = validated_data.get('ageGroup', instance.ageGroup) instance.age_range = validated_data.get('age_range', instance.age_range)
instance.numberOfStudents = validated_data.get('numberOfStudents', instance.numberOfStudents) instance.number_of_students = validated_data.get('number_of_students', instance.number_of_students)
instance.teachingLanguage = validated_data.get('teachingLanguage', instance.teachingLanguage) instance.teaching_language = validated_data.get('teaching_language', instance.teaching_language)
instance.schoolYear = validated_data.get('schoolYear', instance.schoolYear) instance.school_year = validated_data.get('school_year', instance.school_year)
instance.levels = levels_data instance.levels = levels_data
instance.type = validated_data.get('type', instance.type) # Added here instance.type = validated_data.get('type', instance.type) # Added here
instance.schedule = validated_data.get('schedule', instance.schedule) # Added here instance.time_range = validated_data.get('time_range', instance.time_range) # Added here
instance.openingDays = validated_data.get('openingDays', instance.openingDays) # Added here instance.opening_days = validated_data.get('opening_days', instance.opening_days) # Added here
instance.save() instance.save()
instance.teachers.set(teachers_data) instance.teachers.set(teachers_data)
@ -161,34 +143,15 @@ class SchoolClassSerializer(serializers.ModelSerializer):
else: else:
# Create new planning if level not existing # Create new planning if level not existing
Planning.objects.create( Planning.objects.create(
classModel=instance, school_class=instance,
level=level, level=level,
schedule=planning_data.get('schedule', {}) schedule=planning_data.get('schedule', {})
) )
return instance return instance
def get_creationDateFormatted(self, obj): def get_updated_date_formatted(self, obj):
utc_time = timezone.localtime(obj.updatedDate) utc_time = timezone.localtime(obj.updated_date)
local_tz = pytz.timezone(settings.TZ_APPLI) local_tz = pytz.timezone(settings.TZ_APPLI)
local_time = utc_time.astimezone(local_tz) local_time = utc_time.astimezone(local_tz)
return local_time.strftime("%d-%m-%Y %H:%M") return local_time.strftime("%d-%m-%Y %H:%M")
def get_students(self, obj):
studentsList = obj.students.all()
filtered_students = []
for student in studentsList:
registrationForm = bdd.getObject(RegistrationForm, "student__id", student.id)
if registrationForm.status == registrationForm.RegistrationFormStatus.RF_VALIDATED:
filtered_students.append(student)
return StudentSerializer(filtered_students, many=True, read_only=True).data
def get_plannings_read(self, obj):
plannings = obj.plannings.all()
levels_dict = {level: {'level': level, 'planning': None} for level in obj.levels}
for planning in plannings:
if planning.level in levels_dict:
levels_dict[planning.level]['planning'] = PlanningSerializer(planning).data
return list(levels_dict.values())

View File

@ -1,16 +1,16 @@
from django.urls import path, re_path from django.urls import path, re_path
from School.views import TeachersView, EnseignantView, SpecialitiesView, SpecialityView, ClassesView, ClasseView, PlanningsView, PlanningView from School.views import TeachersView, TeacherView, SpecialitiesView, SpecialityView, ClassesView, ClasseView, PlanningsView, PlanningView
urlpatterns = [ urlpatterns = [
re_path(r'^teachers$', TeachersView.as_view(), name="teachers"),
re_path(r'^teacher$', EnseignantView.as_view(), name="teacher"),
re_path(r'^teacher/([0-9]+)$', EnseignantView.as_view(), name="teacher"),
re_path(r'^specialities$', SpecialitiesView.as_view(), name="specialities"), re_path(r'^specialities$', SpecialitiesView.as_view(), name="specialities"),
re_path(r'^speciality$', SpecialityView.as_view(), name="speciality"), re_path(r'^speciality$', SpecialityView.as_view(), name="speciality"),
re_path(r'^speciality/([0-9]+)$', SpecialityView.as_view(), name="speciality"), re_path(r'^speciality/([0-9]+)$', SpecialityView.as_view(), name="speciality"),
re_path(r'^teachers$', TeachersView.as_view(), name="teachers"),
re_path(r'^teacher$', TeacherView.as_view(), name="teacher"),
re_path(r'^teacher/([0-9]+)$', TeacherView.as_view(), name="teacher"),
re_path(r'^schoolClasses$', ClassesView.as_view(), name="schoolClasses"), re_path(r'^schoolClasses$', ClassesView.as_view(), name="schoolClasses"),
re_path(r'^schoolClass$', ClasseView.as_view(), name="schoolClass"), re_path(r'^schoolClass$', ClasseView.as_view(), name="schoolClass"),
re_path(r'^schoolClass/([0-9]+)$', ClasseView.as_view(), name="schoolClass"), re_path(r'^schoolClass/([0-9]+)$', ClasseView.as_view(), name="schoolClass"),

View File

@ -4,59 +4,11 @@ from django.utils.decorators import method_decorator
from rest_framework.parsers import JSONParser from rest_framework.parsers import JSONParser
from rest_framework.views import APIView from rest_framework.views import APIView
from django.core.cache import cache from django.core.cache import cache
from django.core.exceptions import ObjectDoesNotExist
from .models import Teacher, Speciality, SchoolClass, Planning from .models import Teacher, Speciality, SchoolClass, Planning
from .serializers import TeacherSerializer, SpecialitySerializer, SchoolClassSerializer, PlanningSerializer from .serializers import TeacherSerializer, SpecialitySerializer, SchoolClassSerializer, PlanningSerializer
from N3wtSchool import bdd from N3wtSchool import bdd
class TeachersView(APIView):
def get(self, request):
teachersList=bdd.getAllObjects(Teacher)
teachers_serializer=TeacherSerializer(teachersList, many=True)
return JsonResponse(teachers_serializer.data, safe=False)
@method_decorator(csrf_protect, name='dispatch')
@method_decorator(ensure_csrf_cookie, name='dispatch')
class EnseignantView(APIView):
def get (self, request, _id):
teacher = bdd.getObject(_objectName=Teacher, _columnName='id', _value=_id)
teacher_serializer=TeacherSerializer(teacher)
return JsonResponse(teacher_serializer.data, safe=False)
def post(self, request):
teacher_data=JSONParser().parse(request)
teacher_serializer = TeacherSerializer(data=teacher_data)
if teacher_serializer.is_valid():
teacher_serializer.save()
return JsonResponse(teacher_serializer.data, safe=False)
return JsonResponse(teacher_serializer.errors, safe=False)
def put(self, request, _id):
teacher_data=JSONParser().parse(request)
teacher = bdd.getObject(_objectName=Teacher, _columnName='id', _value=_id)
teacher_serializer = TeacherSerializer(teacher, data=teacher_data)
if teacher_serializer.is_valid():
teacher_serializer.save()
return JsonResponse(teacher_serializer.data, safe=False)
return JsonResponse(teacher_serializer.errors, safe=False)
def delete(self, request, _id):
teacher = bdd.getObject(_objectName=Teacher, _columnName='id', _value=_id)
if teacher is not None:
if teacher.profilAssocie:
print('Suppression du profil associé')
teacher.profilAssocie.delete()
teacher.delete()
return JsonResponse({'message': 'La suppression de l\'teacher a été effectuée avec succès'}, safe=False)
else:
return JsonResponse({'erreur': 'L\'teacher n\'a pas été trouvé'}, safe=False)
@method_decorator(csrf_protect, name='dispatch') @method_decorator(csrf_protect, name='dispatch')
@method_decorator(ensure_csrf_cookie, name='dispatch') @method_decorator(ensure_csrf_cookie, name='dispatch')
class SpecialitiesView(APIView): class SpecialitiesView(APIView):
@ -116,11 +68,47 @@ class SpecialityView(APIView):
return JsonResponse(speciality_serializer.errors, safe=False) return JsonResponse(speciality_serializer.errors, safe=False)
def delete(self, request, _id): def delete(self, request, _id):
speciality = bdd.getObject(_objectName=Speciality, _columnName='id', _value=_id) return bdd.delete_object(Speciality, _id)
if speciality != None:
speciality.delete()
return JsonResponse("La suppression de la spécialité a été effectuée avec succès", safe=False) class TeachersView(APIView):
def get(self, request):
teachersList=bdd.getAllObjects(Teacher)
teachers_serializer=TeacherSerializer(teachersList, many=True)
return JsonResponse(teachers_serializer.data, safe=False)
@method_decorator(csrf_protect, name='dispatch')
@method_decorator(ensure_csrf_cookie, name='dispatch')
class TeacherView(APIView):
def get (self, request, _id):
teacher = bdd.getObject(_objectName=Teacher, _columnName='id', _value=_id)
teacher_serializer=TeacherSerializer(teacher)
return JsonResponse(teacher_serializer.data, safe=False)
def post(self, request):
teacher_data=JSONParser().parse(request)
teacher_serializer = TeacherSerializer(data=teacher_data)
if teacher_serializer.is_valid():
teacher_serializer.save()
return JsonResponse(teacher_serializer.data, safe=False)
return JsonResponse(teacher_serializer.errors, safe=False)
def put(self, request, _id):
teacher_data=JSONParser().parse(request)
teacher = bdd.getObject(_objectName=Teacher, _columnName='id', _value=_id)
teacher_serializer = TeacherSerializer(teacher, data=teacher_data)
if teacher_serializer.is_valid():
teacher_serializer.save()
return JsonResponse(teacher_serializer.data, safe=False)
return JsonResponse(teacher_serializer.errors, safe=False)
def delete(self, request, _id):
return bdd.delete_object(Teacher, _id, related_field='associated_profile')
@method_decorator(csrf_protect, name='dispatch') @method_decorator(csrf_protect, name='dispatch')
@method_decorator(ensure_csrf_cookie, name='dispatch') @method_decorator(ensure_csrf_cookie, name='dispatch')
@ -180,23 +168,7 @@ class ClasseView(APIView):
return JsonResponse(classe_serializer.errors, safe=False) return JsonResponse(classe_serializer.errors, safe=False)
def delete(self, request, _id): def delete(self, request, _id):
schoolClass = bdd.getObject(_objectName=SchoolClass, _columnName='id', _value=_id) return bdd.delete_object(SchoolClass, _id)
if schoolClass is not None:
# Supprimer les plannings associés à la schoolClass
for planning in schoolClass.plannings.all():
print(f'Planning à supprimer : {planning}')
planning.delete()
# Retirer la schoolClass des élèves associés
for eleve in schoolClass.eleves.all():
print(f'Student à retirer de la schoolClass : {eleve}')
eleve.classeAssociee = None
eleve.save()
# Supprimer la schoolClass
schoolClass.delete()
return JsonResponse("La suppression de la schoolClass a été effectuée avec succès", safe=False)
@method_decorator(csrf_protect, name='dispatch') @method_decorator(csrf_protect, name='dispatch')