mirror of
https://git.v0id.ovh/n3wt-innov/n3wt-school.git
synced 2026-01-28 23:43:22 +00:00
feat: Ajout de la fratrie [#27]
This commit is contained in:
@ -158,15 +158,33 @@ class StudentSerializer(serializers.ModelSerializer):
|
||||
guardians_ids.append(guardian_instance.id)
|
||||
return guardians_ids
|
||||
|
||||
def create_or_update_siblings(self, siblings_data):
|
||||
siblings_ids = []
|
||||
def create_or_update_siblings(self, siblings_data, student_instance):
|
||||
"""
|
||||
Crée ou met à jour les frères et sœurs associés à un étudiant.
|
||||
Supprime les frères et sœurs qui ne sont plus présents dans siblings_data.
|
||||
"""
|
||||
|
||||
# Si siblings_data est vide, supprimer tous les frères et sœurs associés
|
||||
if not siblings_data:
|
||||
student_instance.siblings.clear() # Supprime toutes les relations
|
||||
return []
|
||||
|
||||
# Récupérer les IDs des frères et sœurs existants
|
||||
existing_sibling_ids = set(student_instance.siblings.values_list('id', flat=True))
|
||||
|
||||
# Créer ou mettre à jour les frères et sœurs
|
||||
updated_sibling_ids = []
|
||||
for sibling_data in siblings_data:
|
||||
sibling_instance, created = Sibling.objects.update_or_create(
|
||||
id=sibling_data.get('id'),
|
||||
defaults=sibling_data
|
||||
)
|
||||
siblings_ids.append(sibling_instance.id)
|
||||
return siblings_ids
|
||||
updated_sibling_ids.append(sibling_instance.id)
|
||||
|
||||
# Supprimer les frères et sœurs qui ne sont plus dans siblings_data
|
||||
siblings_to_delete = existing_sibling_ids - set(updated_sibling_ids)
|
||||
Sibling.objects.filter(id__in=siblings_to_delete).delete()
|
||||
return updated_sibling_ids
|
||||
|
||||
def create_or_update_languages(self, languages_data):
|
||||
languages_ids = []
|
||||
@ -195,8 +213,10 @@ class StudentSerializer(serializers.ModelSerializer):
|
||||
languages_data = validated_data.pop('spoken_languages', [])
|
||||
if guardians_data:
|
||||
instance.guardians.set(self.create_or_update_guardians(guardians_data))
|
||||
if siblings_data:
|
||||
instance.siblings.set(self.create_or_update_siblings(siblings_data))
|
||||
|
||||
sibling_ids = self.create_or_update_siblings(siblings_data, instance)
|
||||
instance.siblings.set(sibling_ids)
|
||||
|
||||
if languages_data:
|
||||
instance.spoken_languages.set(self.create_or_update_languages(languages_data))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user