mirror of
https://git.v0id.ovh/n3wt-innov/n3wt-school.git
synced 2026-01-28 23:43:22 +00:00
feat: Gestion de la mise à jour des profiles / roles / lors de l'édition
du formulaire RF
This commit is contained in:
@ -141,26 +141,61 @@ class StudentSerializer(serializers.ModelSerializer):
|
||||
profile_role = guardian_data.pop('profile_role', None)
|
||||
|
||||
if profile_role_data:
|
||||
# Vérifiez si 'profile_data' est fourni pour créer un nouveau profil
|
||||
profile_data = profile_role_data.pop('profile_data', None)
|
||||
if profile_data:
|
||||
# Créer un nouveau profil
|
||||
profile_serializer = ProfileSerializer(data=profile_data)
|
||||
profile_serializer.is_valid(raise_exception=True)
|
||||
profile = profile_serializer.save()
|
||||
profile.set_password(profile_data['password'])
|
||||
profile.save()
|
||||
profile_role_data['profile'] = profile.id # Associer le profil créé
|
||||
|
||||
# Vérifiez si 'profile' est un objet ou une clé primaire
|
||||
if isinstance(profile_role_data.get('profile'), Profile):
|
||||
profile_role_data['profile'] = profile_role_data['profile'].id
|
||||
|
||||
establishment_id = profile_role_data.pop('establishment').id
|
||||
profile_role_data['establishment'] = establishment_id
|
||||
|
||||
profile_role_serializer = ProfileRoleSerializer(data=profile_role_data)
|
||||
profile_role_serializer.is_valid(raise_exception=True)
|
||||
profile_role = profile_role_serializer.save()
|
||||
# Vérifiez si un ProfileRole existe déjà pour ce profile et cet établissement
|
||||
existing_profile_role = ProfileRole.objects.filter(
|
||||
profile_id=profile_role_data['profile'],
|
||||
establishment=profile_role_data['establishment'],
|
||||
role_type=profile_role_data['role_type']
|
||||
).first()
|
||||
|
||||
if existing_profile_role:
|
||||
# Mettre à jour le ProfileRole existant
|
||||
profile_role_serializer = ProfileRoleSerializer(existing_profile_role, data=profile_role_data)
|
||||
profile_role_serializer.is_valid(raise_exception=True)
|
||||
profile_role = profile_role_serializer.save()
|
||||
else:
|
||||
# Créer un nouveau ProfileRole si aucun n'existe
|
||||
profile_role_serializer = ProfileRoleSerializer(data=profile_role_data)
|
||||
profile_role_serializer.is_valid(raise_exception=True)
|
||||
profile_role = profile_role_serializer.save()
|
||||
elif profile_role:
|
||||
# Récupérer un ProfileRole existant par son ID
|
||||
profile_role = ProfileRole.objects.get(id=profile_role.id)
|
||||
|
||||
if profile_role:
|
||||
guardian_data['profile_role'] = profile_role
|
||||
|
||||
guardian_instance, created = Guardian.objects.update_or_create(
|
||||
id=guardian_data.get('id'),
|
||||
defaults=guardian_data
|
||||
)
|
||||
guardians_ids.append(guardian_instance.id)
|
||||
# Vérifiez si un Guardian existe déjà pour ce ProfileRole
|
||||
existing_guardian = Guardian.objects.filter(profile_role=profile_role).first()
|
||||
if existing_guardian:
|
||||
# Mettre à jour le Guardian existant
|
||||
for key, value in guardian_data.items():
|
||||
setattr(existing_guardian, key, value)
|
||||
existing_guardian.save()
|
||||
guardians_ids.append(existing_guardian.id)
|
||||
else:
|
||||
# Créer un nouveau Guardian
|
||||
guardian_instance = Guardian.objects.create(**guardian_data)
|
||||
guardians_ids.append(guardian_instance.id)
|
||||
|
||||
return guardians_ids
|
||||
|
||||
def create_or_update_siblings(self, siblings_data, student_instance):
|
||||
@ -375,3 +410,4 @@ class NotificationSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = Notification
|
||||
fields = '__all__'
|
||||
|
||||
|
||||
@ -236,6 +236,7 @@ class RegisterFormWithIdView(APIView):
|
||||
studentForm_data = request.data.get('data', '{}')
|
||||
try:
|
||||
data = json.loads(studentForm_data)
|
||||
print(f'data : {data}')
|
||||
except json.JSONDecodeError:
|
||||
return JsonResponse({"error": "Invalid JSON format in 'data'"}, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user